用于指针的C中的内存分配

Mat*_*lle 0 c malloc calloc dynamic-memory-allocation

我正在尝试在C中构建一个名为PROCESS的结构,这个结构应该包含进程的ID(id)和等待时间(wt).

typedef struct PROC{
    int id;
    int wt;
}PROCESS;

PROCESS *pt = NULL;
Run Code Online (Sandbox Code Playgroud)

现在我想像数组一样创建这个结构的一个实例.我想做的是这样的':

PROCESS pt[10];
pt[0].id = 5;
pt[1].id = 7;
Run Code Online (Sandbox Code Playgroud)

但我想用动态内存分配来做到这一点:

pt = calloc(2,sizeof(PROCESS));

pt[0]->id = 5;
Run Code Online (Sandbox Code Playgroud)

我的错是什么?

Pab*_*blo 5

pt是指向的指针PROCESS,pt[0]是指向的第一个PROCESS对象pt.->访问结构成员的操作符必须仅与指针一起使用,否则使用.

pt[0].id = 5;
Run Code Online (Sandbox Code Playgroud)

会是对的.1

既然你说你在做C,你就不需要施放malloc或者calloc.

PROCESS *pt = calloc(2, sizeof *pt);
if(pt == NULL)
{
    // errror handling
    // do not continue
}

pt[0].id = 5;
pt[1].id = 7;
Run Code Online (Sandbox Code Playgroud)

另外不要忘记检查返回值,calloc不要忘记以后释放内存free(pt);.


Fotenotes

1请注意,这相当于

pt->id = 5;
Run Code Online (Sandbox Code Playgroud)

但是如果你想设置id第二个元素,你需要这样做

(pt+1)->id = 7;
Run Code Online (Sandbox Code Playgroud)

但我认为这样做更具可读性

pt[1].id = 7;
Run Code Online (Sandbox Code Playgroud)