我有以下程序:
#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] = '\0';
// no call to free()
return chars;
}
int main(int argc, char** argv) {
char* str;
str = getStr(10);
printf("%s\n", str);
free(str);
return EXIT_SUCCESS;
}
按照我的预期打印10 X
个。
它会在任何具有任何编译器的平台上表现如此吗?
在getStr()
返回后,内存是否仍处于malloced状态?
(我不想将指针作为参数传递:D)
答案 0 :(得分:3)
如果使用malloc
来分配内存,它将保持分配状态,直到您在其上显式调用free
,无论它是如何在函数之间传递,返回等等。
答案 1 :(得分:3)
是的,代码看起来有效,并且任何C编译器的行为都应该是可靠的。
并且,是的,在getStr()
返回后仍然分配内存。因此,对free()
的调用也是正确的。
如果内存不足,请不要忘记malloc()
是否返回NULL
。