假设我使用malloc()
分配了内存,如果我在我的代码中执行:
char *newline = realloc ( oldline , newsize );
// Assuming oldline is the pointer to which the starting address
// of the memory which malloc() has returned, is assigned and,
// say, newsize is integer having 100 value.
现在我的问题是: -
newline
是否有必要指向与oldline
相同的地址,其中包含先前的初始地址? oldline
将被释放(隐式),newline
将负责内存寻址? 完成上述代码后,工作完成后,我该如何释放内存
free(newline);
或
free(oldline);
或两者兼而有之?
答案 0 :(得分:8)
取决于realloc
是否成功。如果realloc
成功,那么:
不!例如,如果在oldline
之后没有足够的连续内存,则newline
将与oldline
不同。
是
free(newline);
,因为必要时已释放oldline
。在将realloc oldline
视为无效指针后。
如果不成功。然后,你使用oldline
就像什么也没发生一样,特别是你应该释放它。
答案 1 :(得分:1)
1)否..实际上newline
根本没有使用(除了存储结果),为什么要问这个?
2)是的
3)只有第一个。
答案 2 :(得分:1)
realloc(old, size)
的C标准:
您负责通过此算法保留的任何块/已分配。 解决这些问题:
1号虽然可以。
2是,如果size == 0或者返回!= 0
3a free oldline,如果返回0且大小!= 0
3b免费换行,如果退回!= 0