我有一个疑问在声明中返回一个局部指针会导致不确定的行为
P = my_malloc(4);
my_malloc有一个名为p的本地指针,当函数返回指针的地址时将被释放。那么它在main中的int * p如何保存函数返回的地址。当函数返回时,其使用的地址可能会或可能不会被其他函数或进程使用。那么下面这个程序是不是一个未定义的行为?
#include<stdio.h>
#include<unistd.h>
void* my_malloc(size_t size){
void *p;
p = sbrk(0);
p = sbrk(size); // This will give the previous address
//p = sbrk(0); // This will give the current address
if(p != (void *)-1){
printf("\n address of p : 0x%x \n",(unsigned int)p);
}
else{
printf("\n Unable to allocate memory! \n");
return NULL;
}
return p;
}
int main(){
int* p;
p = my_malloc(4);
printf("\n address of p : 0x%x \n",(unsigned int)p);
}
当您调用方法时为局部变量分配的内存在从方法返回时释放,并且在返回后使用指向该内存的指针是未定义的行为。如果您在堆上动态分配并返回一个指向该THAT的指针,如果您这样做没问题。 – Patashu 2013-05-13 23:58:01
感谢basile和perreal。我现在明白了为什么它不是一个未定义的行为 – Angus 2013-05-14 00:01:22