発言に疑問がある
p = my_malloc(4);
my_malloc には p というローカル ポインターがあり、関数がポインターのアドレスを返すと、割り当てが解除されます。では、どのように int* p in main が関数によって返されたアドレスを保持できるのでしょうか。関数が戻るとき、それが使用したアドレスは、他の関数またはプロセスによって使用される場合と使用されない場合があります。以下のプログラムは未定義の動作ですか?
#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);
}