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