我有此代码:
MountedJob* new_MountedJob(Job** job){
MountedJob* new = malloc(sizeof(MountedJob*));
printf("ok ");
new->job = *job;
printf("not ok");
new->neededTools = new->job->toolSet;
new->baseInstance = new->job->baseInstance;
new->cj = new->baseInstance->C - hashset_size(new->neededTools);
hashset_new(&new->unneededTools);
return new;
}
它执行10次,每次将Job作为参数传递。它们来自迭代列表,并且以完全相同的方式生成。在第3次迭代中,new->job = *job;
因访问冲突错误代码(0xc0000005)而崩溃。问题是它在调试模式下工作正常,所以我不知道问题可能出在哪里。特别是它适用于前两次迭代,我确实不明白这一点。
谢谢。
答案 0 :(得分:3)
您没有分配适当的大小:
MountedJob* new = malloc(sizeof(MountedJob));
否则,您只分配了一个指针,而不是整个结构。
答案 1 :(得分:2)
为您分配了sizeof(MountedJob *)的内存,即:指针的大小不是结构的大小,因此在访问它时,很可能会覆盖它不应覆盖的地方。
应该是
MountedJob* new = malloc(sizeof(MountedJob));