这是C的双人免费票吗?

这是C的双人免费票吗?,c,free,C,Free,通常,如果一个指针被释放两次,它就是一个双重释放。比如说, 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); 多谢各位 是的。您正在两次释放相同的内存。是的。双重释放是指尝试释放已释放的内存块。pt

通常,如果一个指针被释放两次,它就是一个双重释放。比如说,

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);

多谢各位

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

是的。双重释放是指尝试释放已释放的内存块。ptr和ptr1都指向同一个内存块,因此对
free
的第二次调用试图释放已释放的内存块。

是。库并不关心您在源代码中给变量起了什么名字(代码执行时它早已消失)。重要的是值,在这种情况下,传递给
free()
的值是相同的。

是,因为指针都指向相同的地址,所以传递给free的地址相同

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

printf( "%p", ptr);

或者在调试器中查看它

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

第二个示例的指针悬空