gpt4 book ai didi

C 指针错误,得到 exc_bad_access code=2,address0x100000000

转载 作者:行者123 更新时间:2023-11-30 16:27:41 25 4
gpt4 key购买 nike

我对这个错误很困惑。我写了一个代码来分隔一组。当我运行它时,有时它可以工作,有时会出现 exc_bad_access code=2 错误。这是代码:

typedef struct vertexSet {
int numVertexSet;
int* set1;
int* set2;
} set;

set* bipatitionSet(int Vertex) {

if (Vertex%2){
Vertex +=1;
}

set* set;
set = malloc(sizeof(set));
set->numVertexSet = Vertex/2;
set->set1 = calloc(set->numVertexSet,sizeof(int));
set->set2 = calloc(set->numVertexSet,sizeof(int));

if (set == NULL) {
printf("Set memory allocated error!");
exit(1);
}

if (set->set1 ==NULL||set->set2==NULL) {
free(set);
printf("Set memory allocated error!");
exit(1);
}

for (int i=0; i< set->numVertexSet; i++) {
set->set1[i] = i;
set->set2[i] = i + set->numVertexSet;// got error here
}

return set;
}

当我运行它时,我发现set2地址在for循环中发生了变化,set2[0]的值变成了-17958193。这个错误有时会出现,但并非总是出现。有人可以解释为什么以及如何修复该错误吗?我检查了一下,没有地址冲突。

最佳答案

您不应该将变量命名为与类型相同的名称,因为变量会隐藏类型(您如何理解自己的代码,并区分类型和变量之间的区别?)。在这种情况下,“影子”的含义与“覆盖”类似。

例如,您的 malloc是不正确的,因为 sizeof(set)将是变量 set 的大小,一个简单的4或8字节指针,而不是你的12-20字节struct vertexSet的大小.

关于C 指针错误,得到 exc_bad_access code=2,address0x100000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52673959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com