在C中返回malloced指针

时间:2015-02-20 19:55:36

标签: c pointers malloc

我有以下程序:

#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)

2 个答案:

答案 0 :(得分:3)

如果使用malloc来分配内存,它将保持分配状态,直到您在其上显式调用free,无论它是如何在函数之间传递,返回等等。

答案 1 :(得分:3)

是的,代码看起来有效,并且任何C编译器的行为都应该是可靠的。

并且,是的,在getStr()返回后仍然分配内存。因此,对free()的调用也是正确的。

如果内存不足,请不要忘记malloc()是否返回NULL

相关问题