以下有关C语言的说法中,错误的是________。
-
内存泄露一般是指程序申请了一块内存,使用完后,没有及时将这块内存释放,从而导致程序占用大量内存。
-
可以通过malloc(size_t)函数调用申请超过该机器物理内存大小的内存块。
-
无法通过内存释放函数free(void*)直接将某块已经使用完的物理内存直接还给操作系统。
-
可以通过内存分配函数malloc(size_t)直接申请物理内存。
解答:D
malloc申请的是虚拟内存,而不是物理内存。
内存泄漏:用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。
直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。
当内存不再使用时,应使用free()函数将内存块释放。
与new的区别
在使用上,malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小
第一、malloc 函数返回的是 void * 类型。
对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给
int * 类型变量”。
所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,
建议养成强制转换的习惯。
在Linux中可以有这样:malloc(0),这是因为Linux中malloc有一个下限值16Bytes,注意malloc(-1)是禁止的;
但是在某些系统中是不允许malloc(0)的。
可以参考网上一篇博客对malloc和free的讲解:C语言malloc和free【转载】