将本地指针变量的地址返回给main()函数

msc*_*msc 2 c malloc pointers function

在下面的示例中,函数func()本地指针变量地址返回到main()函数.它在GCC中运行良好.

那么,它是明确定义的行为吗?

#include <stdio.h>
#include <stdlib.h>

int *func(void);

int *func(void)
{
   int *p;
   p = malloc(sizeof *p);
   *p = 10;
   return p;
}

int main() 
{
    int *ptr = func();
    printf("%d\n",*ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 9

不,您返回指向本地变量(的地址)的指针.那会是这样的

int i = 10;
return &i;
Run Code Online (Sandbox Code Playgroud)

而是返回指向堆上分配的对象的指针.

你确实有内存泄漏,因为你没有free任何内存.调用free应该由调用你的函数的代码来完成(除非它反过来返回指针,其中责任继续上升到他的调用链).

  • 要重新迭代,OP返回指针的**值**,而不是**局部变量的**地址. (4认同)