作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我用 MSVC 编译后,我的程序在运行时触发断言失败:_CrtlsValidHeapPointer(pUserData),但代码对我来说看起来没问题...
class A
{
int a;
public:
A();
A(int);
virtual ~A();
void setA(int);
int getA();
virtual void function()=0;
};
class B : virtual public A
{
int b;
public:
B();
B(int,int);
void setB(int);
int getB();
void function();
};
class C : virtual public A
{
int c;
public:
C();
C(int,int);
void setC(int);
int getC();
void function();
};
class D :public B,public C
{
int d;
public:
D();
D(int,int,int,int);
void setD(int);
int getD();
void function();
};
int _tmain(int argc, _TCHAR* argv[])
{
A **p = new A*[4];
int i;
for(i=0;i<4;i++)
{
p[i]=new D(4,3,12,1);
}
for(i=0;i<4;i++)
{
p[i]->function();
}
for(i=0;i<4;i++)
{
delete p[i]; //the assertion fails when attempting to delete p[1]
}
delete[] p;
system("pause");
return 0;
}
我的代码有什么问题?
最佳答案
A
中需要一个虚拟析构函数。它不必在此处执行任何操作,但必须将其声明为 virtual
。
一般来说,如果通过指向基类型的指针删除派生类型的对象,则基类型必须具有虚析构函数。
关于C++ 堆错误 _CrtlsValidHeapPointer(pUserData),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14712450/
在我用 MSVC 编译后,我的程序在运行时触发断言失败:_CrtlsValidHeapPointer(pUserData),但代码对我来说看起来没问题... class A { int a;
我的 for 循环中的 memcpy 有问题 - 我需要将字符串转换为 *char: for(i=0;i<10000;i++){ char* Bchar = new char[Bi[i].le
我正在尝试了解 C++ 中的指针和一流对象。我确定问题存在于我的指针分配或调用中。我想知道是否有人可以帮助我更好地理解指针以及使用静态变量/方法。 FirstClass.h #pragma once
我是一名优秀的程序员,十分优秀!