使用堆空间
malloc 申请空间,需要标注大小,free释放的是指针指向的空间
当不需要再使用申请的内存时,记得释放,并且指针=NULL;
释放后应该把指向这块内存的指针指向NULL,防止程序后面不小心使用了它。
malloc申请的空间其实有两部分,一部分是可用空间,一部分用于记录管理信息。
注意:
free时候 指针不能发生偏移,
原因是指针指向的是申请空间的首地址,而且申请的空间的大小在free源码结构体中有记录
#include<stdlib.h>
#include<stdio.h>#include<string.h>
char *print_stack(){
char c[]="stack!";
puts(c);
return c;
}
char *print_malloc(){
char *p;
p=(char *)malloc(20);
strcpy(p,"malloc");
puts(p);
return p;
}
int main(){
int i;
char *p;
p=print_stack();
puts(p);
p=print_malloc();
puts(p);
free(p);
p=NULL;
system ("pause");
return 0;
}
当栈被使用后会释放栈空间,而malloc只有free掉才算释放堆空间
因此两次stack打印不一致,而malloc打印一致。