我有一个名为Get
的成员函数作为矩阵类结构的一部分。该矩阵保存图像每个像素的灰度代码。这个类声明的指针私有变量当在数组中返回值时,C++访问冲突读取位置
double* matData new double[N*M];
每当我打电话Get
功能我得到的错误:
ACCESS VIOLATION READING LOCATION
下面是我一起工作的两个文件:
矩阵。 h
#ifndef MATRIX
#define MATRIX
class Matrix {
public:
Matrix(int sizeR, int sizeC, double* input_data, string n);
double Get(int i, int j) const;
void Set(int i, int j, double val);
~Matrix();
private:
int M; int N;
string name;
double* matData;
};
#endif
Matrix.cpp
#include <iostream>
#include <string>
using namespace std;
#include "matrix.h"
Matrix::Matrix(int sizeR, int sizeC, double* input_data, string n)
{
M = sizeR;
N = sizeC;
name = n;
double* matData = new double[N*M];
cout << "New Matrix '" << name << "' created" << endl;
for (int ii = 0; ii<M*N; ii++)
{
*(matData + ii) = *(input_data + ii);
}
}
Matrix::Get(int i, int j) const
{
return matData[i * N + j];
}
Matrix::Set(int i, int j, double val)
{
matData[i*N + j] = val;
}
Matrix::~Matrix()
{
delete matData;
}
有人可以解释是什么原因导致这个错误,为什么当我回来的是在那个matData
所指向的内存位置的阵列中的某个点的值它被抛出。谢谢!
它应该是'delete [] matData'。 – Gene
请发布[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。你应该先尝试遵守[The Three of](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-ree)并再次尝试。 – MikeCAT
也许......在你的构造函数中,你正在使用double * matData = ...,它创建一个新变量,而不是类成员。尝试只写matData = new double [N * M] –