6

我有一个分配字符串并返回其指针的函数。当我直接使用它来调用其他函数时,我需要释放内存吗?

例如:

char *getRow(){
     char *someString = (char*) malloc(sizeof(char) * 10);
     strcpy(someString , "asdqwezxc");
     return someString;
}

int main(){
     printf("%s", getRow());
}

在该函数中分配的内存会发生什么?有什么方法可以释放它,还是在使用它之前我需要将它存储到某个变量中?

4

3 回答 3

7

即使您已从函数返回,除非您明确这样做,否则不会释放内存。所以你必须存储返回值并调用free.

int main(){
    char* str = getRow();
    printf("%s", str);
    free(str);
}
于 2012-11-18T04:06:02.143 回答
1

您需要将它存储在一个变量中,使用它,然后释放它。如果你不释放它,你会得到内存泄漏。

于 2012-11-18T04:08:54.213 回答
0

是的,你需要。malloc 从堆中分配内存,您需要显式释放它。诸如char *someString之类的变量是从堆栈中分配的,该堆栈将在函数返回时被释放。我认为您误解了堆栈和堆。

看看这个堆栈和堆是什么和在哪里

于 2012-11-18T04:21:24.117 回答