#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;
}
Quando compilo questo con gcc -ansi -pedantic -W -Wall
i problemi del compilatore di avviso messaggi per foo2() e foo3():restituendo una variabile locale da funzioni in C
warning: function returns address of local variable
ho pensato che non è permesso di restituire un variabile locale, ma foo1() funziona bene e sembra che ci sia un'enorme differenza tra restituire il puntatore a un oggetto locale e l'oggetto stesso.
Qualcuno potrebbe far luce su questo problema? Grazie in anticipo!
Un altro pericolo è che se non si reimposta (ad esempio 'memset') la memoria allocata, questa potrebbe perdere informazioni dalla pila. – jweyrich