gpt4 book ai didi

c - malloc 和 realloc 的区别?

转载 作者:太空狗 更新时间:2023-10-29 16:34:43 24 4
gpt4 key购买 nike

假设我有两个用于创建包含 10 个元素的整数数组的代码示例:

int *pi = (int*)0; 
realloc(pi,10);

还有一个是正常写的,即:

int *pi;
pi= malloc(10*sizeof(int));

现在,我的问题是:第一种赋值是合法的,但没有被使用。为什么,虽然在那里我可能会得到我选择的起始位置?
用常量初始化指针是合法的,但未被使用。为什么?

最佳答案

当传递NULL时,realloc等同于malloc。如果您在某种循环中重新分配并且不想在第一次分配时出现特殊情况,则 NULL 调用会很有用。


虽然我们在这里,但使用 malloc 和 realloc 的相当标准的方法是:

int* p;
p = malloc(10 * sizeof(int)); //Note that there's no cast
//(also, it could just be int* p = malloc(...);)

int* np = realloc(p, 15 * sizeof(int));
//Note that you keep the old pointer -- this is in case the realloc fails

顺便说一句:历史是您在不同行看到声明和赋值的主要原因。在旧版本的 C 中,声明必须首先出现在函数中。这意味着即使您的函数直到 20 行才使用变量,您也必须在顶部声明。

由于您通常不知道未用于另外 20 行的变量的值应该是多少,因此您不能始终将其初始化为任何有意义的值,因此您只剩下一个声明并且没有赋值函数的顶部。

在 C99/C11 中,您不必在范围顶部声明变量。事实上,通常建议定义尽可能接近其使用的变量。

关于c - malloc 和 realloc 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13350495/

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