You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言动态内存分配报错:无法向指定内存位置写入数据

问题原因及修复方案

核心错误点

  • 动态内存申请的空间大小不符合预期:你代码中malloc(sizeof(NodePtr))申请的是指针类型的内存大小(64位环境下通常为8字节,32位环境下为4字节),远小于存储完整Node结构体需要的空间,后续给ptr->data赋值时会触发内存越界,导致段错误、数据损坏等各类不可预期的运行异常。

修正后的代码

#include <stdlib.h> // 需引入头文件才能正常使用malloc

NodePtr makeNode(Household num){
    // 用sizeof(*ptr)写法更安全,自动匹配ptr指向的实体类型大小,避免手动写类型出错
    NodePtr ptr = malloc(sizeof(*ptr));
    // 内存申请失败判空,避免访问空指针触发崩溃
    if (ptr == NULL) {
        return NULL;
    }
    ptr->data = num;
    ptr->next = NULL; // 主动初始化next指针为NULL,避免后续链表操作出现野指针
    return ptr;
}

额外注意事项

  • C 标准中不需要强制转换malloc的返回值,强制转换反而可能隐藏stdlib.h头文件未引入导致的隐式声明问题,仅当需要兼容C++编译时才需要添加强转。
  • 动态内存申请后必须做判空处理,应对系统内存不足的极端场景。
  • 结构体指针成员初始化时主动赋值为NULL,能大幅降低后续链表操作出现野指针的概率。

内容的提问来源于stack exchange,提问作者Naveed Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:39:01