【问题标题】:Memory leak (ERROR: AddressSanitizer: heap-buffer-overflow) in simple block of code简单代码块中的内存泄漏(错误:AddressSanitizer:堆缓冲区溢出)
【发布时间】:2021-03-04 18:12:13
【问题描述】:

我有以下代码:

int main(int argc,char **argv){
  char *flags=malloc(1*sizeof(char));
  flags[0]='a';
  printf("%s\n",flags);
  free(flags);
  return 0;
}

不多不少。

如果我把 printf 注释掉,就不会发生错误。

为什么会出现这个错误,我该如何解决?

【问题讨论】:

  • NUL 在调用printf之前终止字符串,(或使用calloc),另外,1个字节不足以存储“a”,你需要2个字节(一个用于尾随的NUL )

标签: c memory-leaks heap-memory


【解决方案1】:

对于printf("%s\n",flags);flags 应该指向包含字符串的内存。

flags 内存不包含 null 字符,因此不是字符串。

1,使分配给flags 的分配内存更大并附加'\0' 或2,使用有限的打印:printf("%.1s\n",flags); 或3)打印charprintf("%c\n",*flags);

【讨论】:

    猜你喜欢
    • 2023-01-25
    • 2019-01-05
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多