C - 释放功能中分配的内存

时间:2012-11-18 04:02:11

标签: c function memory allocation

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

例如:

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

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

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

3 个答案:

答案 0 :(得分:6)

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

int main(){
    char* str = getRow();
    printf("%s", str);
    free(str);
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

看看这个what-and-where-are-the-stack-and-heap