为什么这不会导致内存泄漏?我在堆上分配了 long long 的空间,然后将返回的指针更改为 char*。之后,我在这个指针上调用 delete(或者在第二个例子中是 free)。这两个示例似乎都不会导致内存泄漏。
#include <stdlib.h>
struct leaky {
long long* testptr;
leaky() {testptr = new long long; }
~leaky() { void* newptr = (void*) testptr;
char* newptr2 = (char*) newptr;
delete newptr2; }
};
struct leaky2 {
long long* testptr;
leaky2() { testptr = (long long*) malloc(sizeof(long long)); }
~leaky2() { void* newptr = (void*) testptr;
char* newptr2 = (char*) newptr;
free (newptr2); }
};
int main() {
while (true) {
{
leaky leak = leaky();
}
}
}
我在 Unix 系统上测试了这个:gcc version 4.6.3 20120306 (Red Hat 4.6.3-2) (GCC)。