所以我在这方面很新,如果这听起来像一个愚蠢的问题,我很抱歉
我试图理解 malloc,并创建一个非常简单的程序,它将使用 ASCII 代码打印“ABC”
到目前为止,这是我的代码(我们的教授教给我们的代码)
char *i;
i = malloc(sizeof(char)*4);
*i = 65;
*(i+1) = 66;
*(i+2) = 67;
*(i+3) = '\0';
我不明白的是,为什么我必须把 malloc 放在那里? 教授告诉我们,如果没有 malloc,程序将无法运行, 但是当我尝试在没有 malloc 的情况下运行它时,程序运行得很好。 那么 malloc 的功能是什么? 我用对了吗?
任何帮助和/或解释将不胜感激
最佳答案
the professor told us the program won't run without the malloc
这不完全正确,正确的措辞应该是:“程序的行为未定义没有malloc()
”。
这是因为
char *i;
只是声明一个指向 char
的指针,但没有初始化——这个指针指向某个不确定位置。您可能只是幸运,因为向这个“随机”位置写入值是有效的,不会导致崩溃。我个人将其称为不幸,因为这在您的程序中隐藏了一个错误。 未定义的行为 意味着任何事情都可能发生,包括“正确”的程序执行。
malloc()
将动态请求一些可用内存并返回指向该内存的指针,因此在 malloc()
之后,你知道 i
指向您可以使用的 4 个字节的内存。如果malloc()
由于某种原因失败(没有更多可用内存),它返回 NULL
-- 你的程序应该在写入 *i
之前对其进行测试.
综上所述,程序当然可以在没有 malloc()
的情况下工作.你可以写
char i[4];
和i
将是一个局部变量,有 4 个字符的空间。
最后的旁注:sizeof(char)
定义为 1
, 所以你可以写 i = malloc(4);
.
关于c - malloc的作用(正确使用malloc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44604395/