【发布时间】:2015-04-30 12:46:49
【问题描述】:
我正在尝试使用类制作动态矩阵。我制作了这段代码。检查了其他代码,它似乎是正确的。编译时我没有收到任何错误消息,除了运行这部分代码时程序中间的 file.exe 错误。它说 file.exe 已停止工作。
有人能看出这段代码有什么问题吗?
头文件
#pragma once
#include <iostream>
class Matrix {
unsigned int nRows, nColumns;
double **board;
public:
Matrix();
Matrix(unsigned int nRows, unsigned int nColumns);
~Matrix();
};
.cpp
#include <iostream>
#include "matrix.h"
using namespace std;
Matrix::Matrix()
: nRows(0)
, nColumns(0)
, board(nullptr)
{}
Matrix::Matrix(unsigned int nRows, unsigned int nColumns)
: nRows(nRows)
, nColumns(nColumns)
, board(nullptr)
{
board = new double*[nRows];
for (int i = 0; i < nRows; ++i)
{
board[i] = new double[nColumns];
}
for (int i =0; i<nRows; ++i)
{
for(int j=0; j<nColumns; ++j)
{
board[i][j]=0.0;
}
}
}
Matrix::~Matrix()
{
for (int i = 0; i < nRows; ++i){
delete [] board[i];
delete [] board;
board = 0;
}
}
主要
#include <iostream>
#include "matrix.h"
int main(){
Matrix A = Matrix(5,5);
}
我正在运行 Visual Studios 2010
编辑:
我已经调试过,问题似乎出在默认构造函数和我尝试使用的构造函数中。在 .cpp 的第 13 行和第 17 行,它尝试访问此行:
retval = HeapFree(_crtheap, 0, pBlock); 在 free.c 中
调试器状态 : 加载 'C:\Windows\SysWOW64\ntdll.dll', 找不到或打开 PDB 文件 0xC0000005 :访问冲突读取位置0x00000004
【问题讨论】:
-
您提供的代码不是"Minimal, Complete, Verifiable Example",您甚至没有识别出哪一行崩溃。您需要提供适量的代码来重现问题,而无需额外包含任何内容。这是否与它在 Matrix 类中有关?你能写一个初始化板子的主程序并得到同样的问题,还是只有在你上课时才会出现问题?
-
在Visual Studio中逐行调试这段代码,找出是哪一行导致它崩溃。
-
我对编程和 stackoverflow 都很陌生,所以谢谢你让我知道。我现在已经隔离了程序,并给出了所有必要的代码。我必须开始工作,但我会在回家的第一件事上尝试逐行调试代码,也许这会提供一个线索。无论如何,感谢您抽出时间。
-
“它说 file.exe 已停止工作” 那是你加载调试器伴侣的时候
-
我已经调试过了,问题似乎出在默认构造函数和我尝试使用的构造函数中。在 .cpp 中的第 13 行和第 17 行,它尝试访问此行: retval = HeapFree(_crtheap, 0, pBlock);在 free.c 调试器状态中:加载 'C:\Windows\SysWOW64\ntdll.dll',找不到或打开 PDB 文件 0xC0000005:访问冲突读取位置 0x00000004。