C访问冲突错误,但不在调试模式下

时间:2018-10-26 15:31:44

标签: c debugging access

我有此代码:

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)而崩溃。问题是它在调试模式下工作正常,所以我不知道问题可能出在哪里。特别是它适用于前两次迭代,我确实不明白这一点。

谢谢。

2 个答案:

答案 0 :(得分:3)

您没有分配适当的大小:

MountedJob* new = malloc(sizeof(MountedJob));

否则,您只分配了一个指针,而不是整个结构。

答案 1 :(得分:2)

为您分配了sizeof(MountedJob *)的内存,即:指针的大小不是结构的大小,因此在访问它时,很可能会覆盖它不应覆盖的地方。

应该是

MountedJob* new = malloc(sizeof(MountedJob));