#include <stdio.h>
int foo1(void)
{
int p;
p = 99;
return p;
}
char *foo2(void)
{
char buffer[] = "test_123";
return buffer;
}
int *foo3(void)
{
int t[3] = {1,2,3};
return t;
}
int main(void)
{
int *p;
char *s;
printf("foo1: %d\n", foo1());
printf("foo2: %s\n", foo2());
printf("foo3: %d, %d, %d\n", p[0], p[1], p[2]);
return 0;
}
当我使用gcc -ansi -pedantic -W -Wall
编译这段代码时,编译器会对foo2()和foo3()发出警告:
warning: function returns address of local variable
我曾认为不允许返回本地变量,但是foo1()可以正常工作,并且返回指向本地对象和本地对象本身之间存在巨大区别。
有没有人能够解释一下这个问题?先谢谢了!
memset
)已分配的内存,可能会从堆栈泄漏信息。 - jweyrichcalloc
发挥作用的时候,当然需要保证连续分配。 - talekeDskobeDa