我有一個名爲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] –