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

C语言for循环中校验malloc返回值及堆缓冲区溢出错误解决

malloc返回值校验逻辑说明

你编写的for循环内校验malloc返回值的逻辑本身是完全正确的,是C语言中内存分配校验的标准写法:在每次malloc调用后立刻判断返回值是否为NULL,若为NULL则报错退出,避免后续访问空指针。

如果学校编译器对这段代码报错,大概率是编译器使用的C标准版本过低导致:C89标准不允许在for循环的括号内定义变量int i,你只需要将i的定义移动到代码块的最开头即可解决。


AddressSanitizer堆溢出问题修复

你遇到的heap-buffer-overflow报错是字符串拷贝时缓冲区长度不足导致的越界写入,结合代码和错误日志有两个明确问题:

  1. 内存分配长度未预留字符串结束符空间
    C语言的字符串以\0作为结束标记,分配存储字符串的内存时,需要在可见字符长度的基础上多分配1字节存储\0。你代码中硬编码的分配长度10/14都没有正确匹配目标字符串的总长度,导致strcpy写入时越界。
    推荐的安全写法是不要硬编码分配长度,直接根据要存储的字符串长度计算:
ptr[i] = malloc(strlen(待存储字符串) + 1);
  1. 使用了未定义的str_compare函数
    C标准库不存在str_compare字符串比较函数,你需要替换为标准库的strcmp函数,否则会触发未定义行为。

内容的提问来源于stack exchange,提问作者Bohuslav Čabajka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:48:03