C中指针的内存分配

memory allocation in C for pointers

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

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

PROCESS *pt = NULL;

现在我想将此结构的多个实例创建为一个数组。 我想做的是这样的':

PROCESS pt[10];
pt[0].id = 5;
pt[1].id = 7;

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

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

pt[0]->id = 5;

我的错误是什么?

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

pt[0].id = 5;

是正确的。1

既然你说你在做C,you don't need to cast malloc or calloc

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

pt[0].id = 5;
pt[1].id = 7;

也不要忘记检查 calloc 的 return 值,不要忘记释放 后来的记忆 free(pt);.


注释

1注意这相当于

pt->id = 5;

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

(pt+1)->id = 7;

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

pt[1].id = 7;
typedef struct process{
    int id;
    int wt;
}processes;

我会这样分配->

int numberOfDynamicStructs=2;

processes* myProcesses= calloc(numberOfDynamicStructs,sizeof(processes));

写入->

myProcesses[0].id=1;
myProcesses[1].id=2;

阅读->

printf("%d %d",myProcesses[0].id,myProcesses[1].id);

完成后免费..

/A