就这一段:
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是否和数组的长度一致
不知道你这个问题是否已经解决, 如果还没有解决的话: