定义了两个函数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;
}