我想在堆上分配一些无法从任何堆栈指针访问的内存。 (这是出于测试目的)。
void *ptr = malloc(sizeof(int));
void *ptr2 = malloc(sizeof(int));
ptr = ptr2;
如果我执行此代码,我认为ptr和ptr2在开始时是堆栈上的两个指针,指的是堆上的一些已分配内存,对吧?然后当我执行ptr = ptr2时,第一个mallocated内存仍然在堆上但不能以任何方式从堆栈中到达。是这样吗?
我有一个程序正在搜索堆栈以查找堆上的所有活动对象,因此我想测试它实际上是否有效。
答案 0 :(得分:5)
有效。但它比必要的更复杂:
malloc(4);
泄漏内存的最简单方法是首先不保存对它的引用。
答案 1 :(得分:0)
如果您只是将代码放入函数中,那么一旦函数结束并且ptr和ptr2超出范围,就会出现内存泄漏。
答案 2 :(得分:0)
尝试使用:
malloc(1);
应该足够了
答案 3 :(得分:0)
通过
引入更难以找到的泄漏malloc(0);
虽然。
答案 4 :(得分:0)
这比做起来更简单,这是维基百科的一个例子:
#include <stdlib.h>
void function_which_allocates(void) {
/* allocate an array of 45 floats */
float * a = malloc(sizeof(float) * 45);
/* additional code making use of 'a' */
/* return to main, having forgotten to free the memory we malloc'd */
}
int main(void) {
function_which_allocates();
/* the pointer 'a' no longer exists, and therefore cannot be freed,
but the memory is still allocated. a leak has occurred. */
}
一旦指向'a'的指针超出范围,内存就会泄漏,因为'a'从未被释放。