c ++析构函数取消分配失败
c++ Destructor de-allocation failing
在下面的 c++ 代码中,在析构函数调用期间,它因以下错误而崩溃。
如果打印出这条消息,至少程序还没有崩溃!
但您可能还想打印其他诊断消息。
DSCodes(16782,0x1000efe00) malloc:对象 0x10742e2f0 的 *** 错误:未分配正在释放的指针
DSCodes(16782,0x1000efe00) malloc: *** 在 malloc_error_break 中设置断点以调试
谁能指出析构函数中的错误
class Pair {
public:
int *pa,*pb;
Pair(int, int);
Pair(const Pair &);
~Pair();
};
Pair::Pair(int p1, int p2)
{
this->pa = new int;
this->pb = new int;
*pa = p1;
*pb = p2;
}
Pair::Pair(const Pair &obj)
{
this->pa= new int;
this->pb = new int;
this->pa = obj.pa;
this->pb = obj.pb;
}
Pair::~Pair()
{
if(pa)
delete (pa);
if(pb)
delete(pb);
}
/* Here is a main() function you can use
* to check your implementation of the
* class Pair member functions.
*/
int main() {
Pair p(15,16);
Pair q(p);
Pair *hp = new Pair(23,42);
delete hp;
std::cout << "If this message is printed,"
<< " at least the program hasn't crashed yet!\n"
<< "But you may want to print other diagnostic messages too." << std::endl;
return 0;
}
问题是您的复制构造函数将另一个对象的 p1
和 p2
分配给当前对象(q
持有相同的 p1
和 p2
即 p
)。所以在程序结束时,q
的析构函数和 p
的析构函数尝试删除两个相同的指针。
在复制构造函数中,你应该复制整数而不是只复制指针。
在您的 Pair::Pair(const Pair &obj) 中,您实际上复制了指针,该指针稍后被双重破坏。您想要复制指针的内容(请参阅 Pair::Pair(int p1, int p2) 构造函数)。
在下面的 c++ 代码中,在析构函数调用期间,它因以下错误而崩溃。
如果打印出这条消息,至少程序还没有崩溃! 但您可能还想打印其他诊断消息。 DSCodes(16782,0x1000efe00) malloc:对象 0x10742e2f0 的 *** 错误:未分配正在释放的指针 DSCodes(16782,0x1000efe00) malloc: *** 在 malloc_error_break 中设置断点以调试
谁能指出析构函数中的错误
class Pair {
public:
int *pa,*pb;
Pair(int, int);
Pair(const Pair &);
~Pair();
};
Pair::Pair(int p1, int p2)
{
this->pa = new int;
this->pb = new int;
*pa = p1;
*pb = p2;
}
Pair::Pair(const Pair &obj)
{
this->pa= new int;
this->pb = new int;
this->pa = obj.pa;
this->pb = obj.pb;
}
Pair::~Pair()
{
if(pa)
delete (pa);
if(pb)
delete(pb);
}
/* Here is a main() function you can use
* to check your implementation of the
* class Pair member functions.
*/
int main() {
Pair p(15,16);
Pair q(p);
Pair *hp = new Pair(23,42);
delete hp;
std::cout << "If this message is printed,"
<< " at least the program hasn't crashed yet!\n"
<< "But you may want to print other diagnostic messages too." << std::endl;
return 0;
}
问题是您的复制构造函数将另一个对象的 p1
和 p2
分配给当前对象(q
持有相同的 p1
和 p2
即 p
)。所以在程序结束时,q
的析构函数和 p
的析构函数尝试删除两个相同的指针。
在复制构造函数中,你应该复制整数而不是只复制指针。
在您的 Pair::Pair(const Pair &obj) 中,您实际上复制了指针,该指针稍后被双重破坏。您想要复制指针的内容(请参阅 Pair::Pair(int p1, int p2) 构造函数)。