C指针错误,得到了exc_bad_access code = 2,地址为0x100000000

时间:2018-10-05 22:24:34

标签: c xcode pointers exc-bad-access

我很困惑这个错误。我写了一个代码来分离一组。当我运行它时,有时它会工作,有时会出现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;
}

运行它时,我发现set地址在for循环中已更改,并且set2 [0]的值变为-17958193。有时但并非始终都会出现此错误。有人可以解释为什么以及如何解决该错误吗?我检查了是否没有地址冲突。

1 个答案:

答案 0 :(得分:0)

您不应该为变量命名与类型相同的名称,因为变量会掩盖类型(以及如何理解自己的代码,并告诉类型与变量之间的区别?)。在这种情况下,“阴影”的含义类似于“覆盖”。

例如,您的+/是不正确的,因为a = np.genfromtxt('data.txt', dtype=['S16', 'S16', 'i8', 'i8', 'i8', 'i8','i8'], delimiter='|') 将是变量a = np.random.randint(1, 10, (20000000,2)) (a == 7).sum() => 4442874 (a[:,0] == 7).sum() => 2220661 (a[:,1] == 7).sum() => 2222213 etc. 的大小,即简单的4或8字节指针,而不是12- 20字节malloc