4

通常,如果指针被释放两次,则它是两次释放。例如,

char *ptr;
ptr=malloc(5 * sizeof(*ptr));
free(ptr);
free(ptr);

上面的代码被认为是双重免费的。以下是否也被视为双重免费?

char *ptr;
char *ptr1;
ptr=malloc(5 * sizeof(*ptr));
ptr1=ptr;
free(ptr);
free(ptr1);

谢谢你。

4

5 回答 5

10

是的。您正在释放相同的内存两次。

于 2010-08-02T16:34:56.840 回答
10

是的。该库并不关心您在源代码中为变量命名的名称(在执行代码时它早已不复存在)。重要的是值,在这种情况下,传递给的值free()是相同的。

于 2010-08-02T16:37:22.343 回答
0

是的,这是双重免费的(而且是一件非常糟糕的事情)。ptr1 是指向 malloc 分配的内存的指针。它与 ptr 指向的位置相同。通过释放 ptr 和 ptr1,您将释放相同的内存两次。

于 2010-08-02T16:41:47.243 回答
0

是的。双重释放是指您尝试释放已释放的内存块。ptr 和 ptr1 都指向同一个内存块,所以第二次调用free是试图释放一个已经被释放的内存块。

于 2010-08-02T16:35:56.807 回答
0

是的,因为指针都指向相同的地址,因此将相同的地址传递给 free。

您可以通过打印来显示指针的值

printf( "%p", ptr);

或者在调试器中查看

于 2010-08-02T16:37:51.983 回答