gpt4 book ai didi

c - C 中的 malloc 函数

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:11 24 4
gpt4 key购买 nike

我写了下面的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
char* ch = malloc(0 * sizeof(char));
int n = 300;
sprintf(ch, "%d", n);
printf("ch is : %s", ch);
return 0;
}

我已将 malloc 函数中的 0 切换为不同的数字进行实验,我尝试将 0 表示不分配内存,但是当我运行该程序时它工作得很好,我不明白为什么会这样,因为如果我把 0 就好像根本没有分配内存,所以这里发生了什么?

最佳答案

C 让你搬起石头砸自己的脚。

malloc 文档说

If size is zero, the return value depends on the particular library implementation (it may or may not be a null pointer), but the returned pointer shall not be dereferenced.

因此您的实现返回的不是零。您的 sprintf 正在写入它“不应”写入的内存。但在这种特殊情况下,你很幸运,而且它在任何地方都不是关键的——至少在这个简短的测试程序中没有任何地方是重要的。在具有更多 malloc 和 free 的较长程序中,您几乎肯定会遇到麻烦。

关于c - C 中的 malloc 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25496647/

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