我有以下程序:
#include <stdio.h>
#include <stdlib.h>
char* getStr(int length) {
char* chars = malloc(length + 1);
int i;
for(i = 0; i < length; i++)
chars[i] = 'X';
chars[i] = ' ';
// no call to free()
return chars;
}
int main(int argc, char** argv) {
char* str;
str = getStr(10);
printf("%sn", str);
free(str);
return EXIT_SUCCESS;
}
正如我所料,它打印了10个X
。它在任何带有编译器的平台上都会这样表现吗?getStr()
返回后,内存是否仍处于mallocated状态?
(我不想将指针作为参数传递:D)
是的,代码看起来是有效的,并且任何C编译器的行为都应该是可靠的。
是的,在getStr()
返回之后,内存仍然被分配。因此,对free()
的调用也是正确的。
不要忘记检查malloc()
是否返回NULL
,以防内存不足。
如果使用malloc
分配内存,则在显式调用free
之前,它将一直处于分配状态,无论它如何在函数之间传递、返回等。