#include <malloc.h>
int main()
{
int *p = (int *)malloc(10) //动态申请10字节内存空间
free(p) //释放申请的内存空间
getchar()
return 0
}
不可以的。malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。
那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用free呢。我的回答是,尽量不要,大部分情况都会带来风险。这里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函数的区别。
是因为你的malloc用错了,分配少了内存。
正确如下:
#include <stdio.h>#include <malloc.h>
int main(void)
{
int *p = (int *)malloc(sizeof(int))
*p = 22
free(p)
return 0
}
int的大小通常是4,不是2。