小c程序basic.returning指针

时间:2011-07-10 06:16:00

标签: c pointers

我总是怀疑这个疑问。请参阅以下计划:

#include <stdio.h>
char * function1(void);
int main()
{
    char *ch;
    ch = function1();
    printf("hello");
    free(ch);
    return 0;
}

char* function1()
{
    char *temp;
    temp = (char *)malloc(sizeof(char)*10);
    return temp;
}
我在这里泄漏了记忆吗? 该程序不会因为某些警告而崩溃:

prog.c: In function ‘main’:
prog.c:11: warning: implicit declaration of function ‘free’
prog.c:11: warning: incompatible implicit declaration of built-in function ‘free’
prog.c: In function ‘function1’:
prog.c:19: warning: implicit declaration of function ‘malloc’
prog.c:19: warning: incompatible implicit declaration of built-in function ‘malloc’

并打印你好。

我只是C.so的初学者请帮助我理解在function1.does中返回语句之后会发生什么事情真的释放了funtion1中分配的内存?

4 个答案:

答案 0 :(得分:7)

内存泄漏

您的代码没有泄漏任何内存,因为您free(ch); free malloc内部function1分配的内存char* function1() { char *temp; temp=(char *)malloc(sizeof(char)*10); printf("temp: %p\n", temp); return temp; } 。 您可以通过打印指针地址来检查这一点,即:

ch = function1();
printf("ch: %p\n", ch);

ch

您应该会看到两个打印件(tempfree(ch);)都会打印相同的地址。因此,freemalloc正确的free ed内存块。

您也可以使用valgrind检查您的代码是否free分配了内存。

关于警告

函数mallocstdlib.h#include <stdlib.h> #include <stdio.h> ... 定义。

在您的代码中添加:

malloc

此外,投射temp=(char *)malloc(...);返回值{{1}}并不是一个好主意。 阅读here

答案 1 :(得分:2)

您需要包含stdlib.h才能使用freemalloc

在上面的代码中,freemalloc实际上做了什么并不重要,所以它仍然有效。

答案 2 :(得分:0)

是的,free释放在函数1中分配的内存并将其返回到空闲内存池,以便可以重用它。这很重要,因为如果你没有释放内存,你就可以在RAM满了的情况下到达,并且调用malloc失败。

包含stdlib.h,因为它包含malloc的定义。

另外,如果您使用免费,则不会泄露内存

答案 3 :(得分:0)

建议的替代方案:

#include <stdio.h>
#include <malloc.h>

char * function1(void);

int
main(int argc, char *argv[])
{
  char *ch = function1();
  if (!ch)
    printf("ERROR: Unable to allocate memory!\n");
  else
  {
    printf("Allocation successful.\n");
    free(ch);
  }
  return 0;
}

char*
function1()
{
  return (char *)malloc(10);
}

编译:

  

gcc -Wall -pedantic -o x x.c(其中“x.c”是源文件,“x”是.exe)