C指针错误,得到exc_bad_access代码=2,地址0x100000000
C pointer error, got exc_bad_access code=2, address0x100000000
我对这个错误很困惑。我写了一个代码来分离一组。当我 运行 它时,有时它可以工作,有时会出现 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;
}
当我运行它的时候,发现for循环中set2的地址变了,set2[0]的值变成了-17958193。有时会出现此错误,但并非总是如此。有人可以解释为什么以及如何解决错误吗?我查了一下没有地址冲突
您不应该将变量命名为类型,因为变量会影响类型(您如何理解自己的代码,并区分类型和变量之间的区别?)。在这种情况下 "shadow" 与 "overwrite".
的含义相似
例如,您的 malloc
是不正确的,因为 sizeof(set)
将是变量 set
的大小,一个简单的 4 或 8 字节指针,而不是您的12-20 字节 struct vertexSet
.
我对这个错误很困惑。我写了一个代码来分离一组。当我 运行 它时,有时它可以工作,有时会出现 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;
}
当我运行它的时候,发现for循环中set2的地址变了,set2[0]的值变成了-17958193。有时会出现此错误,但并非总是如此。有人可以解释为什么以及如何解决错误吗?我查了一下没有地址冲突
您不应该将变量命名为类型,因为变量会影响类型(您如何理解自己的代码,并区分类型和变量之间的区别?)。在这种情况下 "shadow" 与 "overwrite".
的含义相似例如,您的 malloc
是不正确的,因为 sizeof(set)
将是变量 set
的大小,一个简单的 4 或 8 字节指针,而不是您的12-20 字节 struct vertexSet
.