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
我正在尝试用 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