C++ Segmentation fault异常

C++ (g++.exe)

就这一段:

typedef struct {
  int id;
  int type;
} _PROC_TYPE_ID;
typedef int _PROC_ID_TYPE;
typedef int _PROC_ID;

_PROC_TYPE_ID error[] = {-1, 2};
_PROC_TYPE_ID* __NS_getEnableID(int size, _PROC_ID_TYPE ptype) {
    static _PROC_ID usedID = 0;
    const _PROC_ID MaxID = 512;

    if (usedID+size-1 > MaxID || size > 8 || size <= 0) return error;
    
    _PROC_TYPE_ID *ids[size];

    for (int i = 0; i < size-1; i++) {

        ids[i]->id = usedID+i; // here!!
        ids[i]->type = ptype;
    }
    
    usedID += size-1;
    return *ids;
}

在"ids[i]->id"那一行提示Segmentation fault.
网上说是访问了空指针的地址, 也不知道怎么改awa

【GPT】
问题出在这一句代码:

_PROC_TYPE_ID *ids[size];

这是定义了一个指针数组,但是并没有为数组中的每个指针分配内存空间。因此,在对ids[i]->id进行赋值时,就会访问到未分配空间的地址,导致Segmentation fault错误。

要解决这个问题,可以将该行代码改成如下形式:

_PROC_TYPE_ID ids[size];
_PROC_TYPE_ID *p_ids[size];
for (int i = 0; i < size; i++) {
    p_ids[i] = &ids[i];
}

for (int i = 0; i < size; i++) {
    p_ids[i]->id = usedID+i;
    p_ids[i]->type = ptype;
}

这里先定义数组ids并申请内存,然后再定义一个指针数组p_ids,将每个指针都指向对应的ids元素,最后在循环中通过指针指向的方式来赋值。

数组越界而已,就是i这个下标,超出ids这个数组的长度。请确认循环那个size是否和数组的长度一致

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^