关键词:
【中文标题】编译动态矩阵时出现file.exe错误【英文标题】:file.exe error when compiling dynamic matrix 【发布时间】: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中逐行调试这段代码,找出是哪一行导致它崩溃。 我对编程和 *** 都很陌生,所以谢谢你让我知道。我现在已经隔离了程序,并给出了所有必要的代码。我必须开始工作,但我会在回家的第一件事上尝试逐行调试代码,也许这会提供一个线索。无论如何,感谢您抽出时间。 “它说 file.exe 已停止工作” 那是你加载调试器伴侣的时候 我已经调试过了,问题似乎出在默认构造函数和我尝试使用的构造函数中。在 .cpp 中的第 13 行和第 17 行,它尝试访问此行: retval = HeapFree(_crtheap, 0, pBlock);在 free.c 调试器状态中:加载 'C:\Windows\SysWOW64\ntdll.dll',找不到或打开 PDB 文件 0xC0000005:访问冲突读取位置 0x00000004。 【参考方案1】:您正在制作 Matrix 的副本,但您没有有效的复制构造函数。将您的代码更改为以下内容:
#include <iostream>
#include "matrix.h"
int main()
Matrix A(5,5);
return 0;
或者,您可以添加一个复制构造函数:
Matrix::Matrix(const Matrix& other) :
Matrix(other.nRows, other.nColumns)
for (int i =0; i<nRows; ++i)
for(int j=0; j<nColumns; ++j)
board[i][j]=other.board[i][j];
不过,您采用的方法非常像“C”。如果我正在实现一个矩阵类,我会使用标准的 c++ 容器,可能是数组或向量,具体取决于具体情况。
这是一个矩阵的工作实现。我并没有真正考虑过或测试过,网上可能还有一百万个更好的实现:
#include <vector>
#include <iostream>
#include <stdexcept>
#include <iomanip>
using namespace std;
class Matrix
public:
Matrix() : nRows(0), nColumns(0), maxSize(0)
Matrix(size_t r, size_t c) :
nRows(r), nColumns(c), cont(r*c, 0), maxSize(r*c)
Matrix(const Matrix& other) :
nRows(other.nRows),
nColumns(other.nColumns),
cont(other.cont.begin(), other.cont.end())
void grow(size_t r, size_t c)
vector<double> growth(r*c, 0);
for (size_t i=0; i<nRows; ++i)
for (size_t j=0; j<nColumns; ++j)
size_t indexNew = convertToIndex(j, i, c, r*c);
size_t indexOld = convertToIndex(j, i);
growth[indexNew] = cont[indexOld];
nRows = r;
nColumns = c;
maxSize = r * c;
cont = growth;
double get(size_t row_i, size_t col_i) const
return cont[convertToIndex(col_i, row_i)];
void set(size_t row_i, size_t col_i, double val)
cont[convertToIndex(col_i, row_i)] = val;
void printHeader() const
for (size_t col = 0; col < nColumns; ++col)
size_t width = 5;
if (col == 0) width = 10;
cout << setw(width) << col + 1;
cout << endl;
void printRow(size_t r) const
cout << fixed << setprecision(1);
for (size_t col = 0; col < nColumns; ++col)
double d = get(r, col);
cout << setw(5) << d;
void print() const
if (nRows == 0 || nColumns == 0) return;
printHeader();
for (size_t row = 0; row< nRows; ++row)
cout << setw(5) << row + 1;
printRow(row);
cout << endl;
private:
size_t maxSize;
size_t nRows;
size_t nColumns;
vector<double> cont;
static inline size_t convertToIndex(
size_t col_i, size_t row_i, size_t numCols, size_t maxSize)
size_t index = row_i* numCols + col_i;
if (index >= maxSize)
throw out_of_range("calculated index past the end of the vector");
return index;
inline size_t convertToIndex(size_t col_i, size_t row_i) const
return convertToIndex(col_i, row_i, nColumns, maxSize);
;
int main()
try
Matrix m(3,3);
for (size_t i=0; i<3; ++i)
m.set(i,i, 1.0);
Matrix b(m);
b.grow(5, 7);
b.print();
catch (const exception& exp)
cerr << "EXCEPTION: " << exp.what() << endl;
return 0;
【讨论】:
好吧,使用您编写的第一个代码似乎也崩溃了。我已经调试过,问题似乎出在默认构造函数和我尝试使用的构造函数中。在第 13 行和第 17 行,它尝试访问此行: retval = HeapFree(_crtheap, 0, pBlock);在 free.c 调试器状态中:加载 'C:\Windows\SysWOW64\ntdll.dll',找不到或打开 PDB 文件 0xC0000005:访问冲突读取位置 0x00000004。我很想看看你会如何解决它的例子! 添加了我的实现。在运行时动态加载库时出现“未解析的外部符号”错误
...具链)以动态加载B.dll在运行时。但是如果没有与B.dll的编译时链接,我在构建可 查看详情
创建多个矩阵时出现分段错误(核心转储)
】创建多个矩阵时出现分段错误(核心转储)【英文标题】:SegmentationFault(coredumped)whencreatingmultiplematrixes【发布时间】:2018-12-0415:11:07【问题描述】:对于我的计算机视觉课程,我们目前正在研究Canny边缘检测算法。对于那些熟... 查看详情
使用 Numba 进行矩阵乘法时出现 CUDA 内存不足错误
】使用Numba进行矩阵乘法时出现CUDA内存不足错误【英文标题】:CUDAoutofmemoryerrorwhendoingmatrixmultiplicationusingNumba【发布时间】:2021-07-0815:29:44【问题描述】:我需要将一个矩阵与其转置相乘,但我的GPU上的内存不足并出现错误消息n... 查看详情
编译时出现graphQL错误
】编译时出现graphQL错误【英文标题】:gettinggraphQLerrorwhencompiling【发布时间】:2018-06-1800:40:33【问题描述】:我正在阅读本教程:https://www.gatsbyjs.org/blog/2017-07-19-creating-a-blog-with-gatsby/我已完成所有操作,但出现graphQL编译错误:Gr... 查看详情
尝试使用动态透视查询时出现语法错误
】尝试使用动态透视查询时出现语法错误【英文标题】:SyntaxErrorwhentryingtouseDynamicPivotQuery【发布时间】:2021-09-1809:41:26【问题描述】:我已经玩了一段时间的PIVOT功能。我有一张像这样的表IdPersonaIdEstadoSocioPeriodo----------------------... 查看详情
为啥编译时出现多个定义错误?
】为啥编译时出现多个定义错误?【英文标题】:WhyamIgettingMultipledefinitionerrorswhilecompiling?为什么编译时出现多个定义错误?【发布时间】:2021-07-0818:21:25【问题描述】:我正在尝试在Contiki中编写一个简单的程序来生成两个数字... 查看详情
编译时出现ARC错误
】编译时出现ARC错误【英文标题】:ARCerrorwhencompiling【发布时间】:2011-08-2317:09:06【问题描述】:我正在尝试使用LLVMGCC4.0编译器进行编译,但在我的多个.m文件中出现此错误:ARCforbidsexplicitmessagesendof\'release\'我尝试使用-fno-objc-ar... 查看详情
执行动态 malloc 代码时出现“分段错误”
】执行动态malloc代码时出现“分段错误”【英文标题】:"Segmentationfault"whileexecutedynamicllymalloccode【发布时间】:2012-08-0506:08:33【问题描述】:我在x86_64上编写了一个示例代码,尝试执行动态malloc代码。有一个程序收到信... 查看详情
尝试编译函数时出现语法错误
】尝试编译函数时出现语法错误【英文标题】:Gettingsyntaxerrorswhiletryingtocompileafunctiom【发布时间】:2016-08-0205:03:56【问题描述】:我正在尝试编译以下函数,但出现大量语法错误。我犯了什么错误?我错过了什么吗?能否给出返... 查看详情
编译函数时出现“PLS-00049:绑定变量错误”
】编译函数时出现“PLS-00049:绑定变量错误”【英文标题】:\'PLS-00049:badbindvariable\'whencompilingfunction【发布时间】:2018-06-1307:09:50【问题描述】:编译此函数时出现错误:PLS-00049:错误的绑定变量“RETURN_VALUE”我需要这方面的帮... 查看详情
编译 streamlit 程序时出现多个错误
】编译streamlit程序时出现多个错误【英文标题】:Gettingmultipleerrorswhilecompilingstreamlitprogram【发布时间】:2021-11-2410:07:07【问题描述】:运行此命令时:streamlitrunapp.py我收到以下错误:ModuleNotFoundError:Nomodulenamed\'scipy.integrate._ivp.comm... 查看详情
编译节点模块时出现打字稿错误
】编译节点模块时出现打字稿错误【英文标题】:typescripterrorwhencompilingnodemodule【发布时间】:2018-04-2014:09:52【问题描述】:我下载了Typescript,Express,Sequelize,PostgresExample并运行npminstall和npmstart。在npmstart上会产生一些错误。[11:27:11... 查看详情
在 Qt 中编译项目时出现错误
】在Qt中编译项目时出现错误【英文标题】:IhaveerrorwhilecompilingprojectinQt【发布时间】:2014-12-2416:07:32【问题描述】:我在Qt4.x中创建了项目,现在我正在Qt5.3.1上编译这个项目。该项目在Windows上编译得很好,但在为Android编译时出... 查看详情
编译项目时出现 25.0.0 错误
】编译项目时出现25.0.0错误【英文标题】:Errorof25.0.0whilecompilingtheproject【发布时间】:2017-03-1407:16:35【问题描述】:我有一个项目到目前为止运行良好。今天突然遇到这些问题:Error:Aproblemoccurredconfiguringproject\':app\'.>Couldnotreso... 查看详情
为啥我在使用模板函数时出现编译错误
】为啥我在使用模板函数时出现编译错误【英文标题】:Whydoigetcompileerrorwhileusingtemplatefunction为什么我在使用模板函数时出现编译错误【发布时间】:2020-07-1711:52:03【问题描述】:我有一个基类。#include<string.h>classChannelprivate... 查看详情
ff 创建时出现编译错误的函数
】ff创建时出现编译错误的函数【英文标题】:ffFunctioncreatedwithcompilationerrors【发布时间】:2021-04-2419:51:39【问题描述】:createorreplacefunctioncart_jaune(codeinequipe.num_eq%type)returnintegerasnbinteger:=0;beginselectcount(*)intonbfromsanctionners 查看详情
编译过程时出现oracle错误
】编译过程时出现oracle错误【英文标题】:oracleerrorwhilecompilingprocedure【发布时间】:2016-10-1010:54:21【问题描述】:我在创建以下程序时遇到错误,我还从程序中删除了大部分部分,并且只包含了我遇到问题的部分。问题出在解... 查看详情
以编程方式设置动态uiimageview时出现LayoutConstraint错误
】以编程方式设置动态uiimageview时出现LayoutConstraint错误【英文标题】:LayoutConstrainterrorwhenprogrammaticallysettingdynamicuiimageview【发布时间】:2015-03-2716:57:33【问题描述】:我有一个依赖于iAdBanner出现的UIImageView位置。我收到错误:"<... 查看详情