元气_hi 2023-04-02 12:02 采纳率: 80%
浏览 16
已结题

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

  • 写回答

3条回答 默认 最新

  • hackferances 2023-04-02 13:11
    关注

    【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元素,最后在循环中通过指针指向的方式来赋值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月10日
  • 已采纳回答 4月2日
  • 修改了问题 4月2日
  • 创建了问题 4月2日

悬赏问题

  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab