在 C 中返回 malloced 指针
Returning malloced pointer in C
我有以下程序:
#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] = '[=10=]';
// 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()
returns 之后内存是否仍然分配?
(我不想将指针作为参数传递:D)
如果您使用 malloc
分配内存,它将保持分配状态,直到您显式调用 free
为止,无论它如何在函数之间传递、返回等。
是的,代码看起来有效,并且行为对于任何 C 编译器都应该是可靠的。
而且,是的,在getStr()
returns之后仍然分配了内存。所以调用free()
也是正确的
不要忘记检查malloc()
returns NULL
,以防内存不足。
我有以下程序:
#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] = '[=10=]';
// 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()
returns 之后内存是否仍然分配?
(我不想将指针作为参数传递:D)
如果您使用 malloc
分配内存,它将保持分配状态,直到您显式调用 free
为止,无论它如何在函数之间传递、返回等。
是的,代码看起来有效,并且行为对于任何 C 编译器都应该是可靠的。
而且,是的,在getStr()
returns之后仍然分配了内存。所以调用free()
也是正确的
不要忘记检查malloc()
returns NULL
,以防内存不足。