在 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,以防内存不足。