定義了兩個函數print_stack()
和print_malloc()
,分別演示了兩種不同的內存分配方式:棧內存和堆內存。然后在main()
函數中調用這兩個函數,并將它們返回的指針打印出來。
-
由于
print_stack()
中的數組c是在棧上分配的,當函數返回后,c所在的內存空間就會被釋放,因此在main()
函數中再次打印p時,會導致未定義的行為。 -
而
print_malloc()
函數中使用了動態內存分配函數malloc,在函數返回后,由于是在堆上分配的內存空間,因此在main()
函數中再次打印p時,仍然能夠正確輸出來。
代碼展示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define N 5
char* print_stack(){char c[100]="hello hasdhkjas";char *p;p=c;puts(p);return p;
}char* print_malloc(){char *p;p=(char*)malloc(N);strcpy(p,"helloolleh");puts(p);return p;}int main(){char *p;p= print_stack();puts(p);p= print_malloc();puts(p);return 0;
}