具有指针类型成员的类在 MSVS2012@debug 下销毁时失败.程序错误或错误源
class with pointer type member fails at destruction under MSVS2012@debug. Program error or bad source?
当我尝试使用 msvs2012 调试我的大程序时,如果我在调试模式下进行调试,它总是以 _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
结束。在发布模式和 g++ 下(也带有 -O0 标志),它不会给出任何错误。我还阅读了一些关于这个主题的文章(类和析构函数中的错误消息和指针),但我找不到我的代码有什么问题。我在下面提供了一个最小(不)工作的例子。你能指出问题所在并展示如何解决吗?(使用 std 容器对我来说不是解决方案。
#include <iostream>
using namespace std;
class block_data {
public:
int size;
double * data;
block_data() {};
block_data(int s)
{
size = s;
data = new double [size];
for (int i=0; i<size; ++i)
data[i] = i;
}
~block_data() {delete[] data;};
block_data operator+(const block_data& toadd)
{
block_data C(toadd.size);
for (int i=0; i<size; ++i)
C.data[i] = data[i] + toadd.data[i];
return C;
}
block_data& operator=(const block_data& copy)
{
for (int i=0; i<size; ++i)
data[i] += copy.data[i];
return *this;
}
};
int main()
{
block_data sum(10);
for (int seed = 0; seed < 10; ++seed)
{
block_data d(10);
sum = sum + d;
}
return 0;
}
除了已经提到的复制构造函数问题之外,如果 toadd.size 小于 size,您将在运算符 + 中出现访问冲突,因为您将引用未分配的内存,赋值运算符也是如此。
似乎如果我添加一个复制构造函数,它会按照 Falcon 的建议解决问题@Dark。
block_data(block_data& tocopy) : size(tocopy.size), data(new double[tocopy.size])
{
for (int i=0; i<size; ++i)
data[i] = tocopy.data[i];
}
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- Websocket++ 错误:收到错误handle_transport_init TLS 握手失败
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 构建失败错误:无法使用 qibuild 构建C++ SDK Helloworld
- q网络回复 无状态码或错误,但失败
- 创建服务失败0x6f7存根收到错误数据
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 调试模板时出现问题.专门针对 Linux GCC 7、GCC 6、GCC 5、GCC 4.9 错误构建失败:模板参数 1
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 错误:断言失败 (src.type() == CV_8UC1) 在阈值中
- 失败,出现错误 87:参数不正确.如何判断哪个参数不正确?
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 加速兽握手:sslv3 警报握手失败错误
- 自定义预期失败的完整错误消息(boost::spirit::x3)
- 从 Linux OMI (omicli) 到 Windows WMI 的连接失败,并出现与 DMTF 相关的错误
- libcurl错误失败的写作已接收到磁盘/应用程序的数据
- std::timed_mutex::try_lock*错误失败