int main(int argc, char* argv[])
{
void *test_ptr = NULL;
test_ptr = malloc(10);
free(test_ptr);
return 0;
}
象上面的写法对吗?free可以根据指针就知道他的大小去释放内存空间吗?
int main(int argc, char* argv[])
{
void *test_ptr = NULL;
test_ptr = malloc(10);
free(test_ptr);
return 0;
}
象上面的写法对吗?free可以根据指针就知道他的大小去释放内存空间吗?
不能。FREE不能依靠单纯的指针去释放。
你去看看BMP文件的结构,看看很多的程序的结构,他们的结构体中都会存有数据的大小,而且因为面对的是数据流,所以大小往往被放在最开头。
同样的,你MALLOC(10) ,实际上一定会大于10,它要在内部去存储开辟内存的大小的数据,依次来决定释放的字节。
看见p - 2 的数值了吗?它就是14:10个字节的MALLOC,4字节是大小数据单元。
FREE就是根据那个数值才知道到底释放多少的。
完全正确。
只需注意产生野指针就好了。