#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;
}
Kiedy skompilować to z gcc -ansi -pedantic -W -Wall
problemów kompilatora komunikaty ostrzegawcze dla foo2() i foo3():powrocie zmiennej lokalnej z funkcji w C
warning: function returns address of local variable
myślałem, że nie dopuszcza się zwróci zmienna lokalna, ale foo1() działa dobrze i wydaje się, że istnieje ogromna różnica między zwracaniem wskaźnika do lokalnego obiektu a samym obiektem.
Czy ktokolwiek mógłby rzucić nieco światła na tę kwestię? Z góry dziękuję!
Innym niebezpieczeństwem jest, jeśli nie zresetujesz (np. 'Memset') przydzielonej pamięci, może to spowodować wyciek informacji ze stosu. – jweyrich