gpt4 book ai didi

C 编程,使用 BUFSIZ、malloc 和 memset 的缺陷

转载 作者:行者123 更新时间:2023-11-30 20:26:29 24 4
gpt4 key购买 nike

我在 C 编程中遇到了这个问题:

问题:下面的代码片段中用零填充缓冲区的缺陷是什么?如何解决这个问题?

char*buf;
buf=malloc(BUFSIZ);
memset(buf,0,BUFSIZ);

我试图找出缺陷,但一切对我来说都很好。如果上述C程序有任何缺陷,请告诉我。

最佳答案

//somewhere
const size_t BUFSIZE = 1000; //or it could be 0!
...
char *buf = NULL;
if (BUFSIZE > 0) {
buf = (char*) malloc(BUFSIZ); //cast is not necessary on most compilers

if (buf == NULL) {
//some error processing
} else {
memset(buf, 0, BUFSIZ);
}

free(buf);
buf = NULL;
}
  1. 将指针设置为 NULL
  2. malloc 正字节数,因为 0 的行为是特定于实现的
  3. 检查 malloc 后是否为空
  4. 可用内存。如果为 NULL,则不会发生任何事情
  5. 释放后使指针无效
  6. cast malloc,有些编译器会发出警告,而不是错误。好吧,真的,不要转换
  7. 也许有一些标准,例如 MISRA,因此此代码对于该标准绝对无效
  8. 这也可能是线程不安全的

关于C 编程,使用 BUFSIZ、malloc 和 memset 的缺陷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com