#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;
}
Khi tôi biên dịch này với gcc -ansi -pedantic -W -Wall
các vấn đề biên dịch thông điệp cảnh báo cho foo2() và foo3():trở về một biến địa phương từ hàm trong C
warning: function returns address of local variable
tôi nghĩ rằng nó không được phép trả lại một biến cục bộ, nhưng foo1() hoạt động tốt và có vẻ như có một sự khác biệt lớn giữa việc trả về con trỏ tới một đối tượng cục bộ và chính đối tượng đó.
Ai đó có thể làm sáng tỏ vấn đề này? Cảm ơn trước!
Một mối nguy hiểm khác là nếu bạn không đặt lại (ví dụ: 'memset') bộ nhớ được cấp phát, nó có thể làm rò rỉ thông tin từ ngăn xếp. – jweyrich