![](/img/trans.png)
[英]C++ Access Violation reading location 0xDDDDDDCD when I try to delete an array UPDATED
[英]C++ Access violation reading location when returning value in an array
我有一個名為Get
的成員函數,它是矩陣類結構的一部分。 該矩陣保存圖像的每個像素的灰度代碼。 該類聲明一個指向私有變量的指針
double* matData new double[N*M];
每當我調用Get
函數時,都會出現錯誤:
ACCESS VIOLATION READING LOCATION
這是我正在使用的兩個文件:
#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
#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
指向的內存位置的數組中某個點的值時拋出該錯誤的原因。 謝謝!
double* matData = new double[N*M];
在構造函數中創建一個新的指針。 內存立即泄漏,並且成員指針仍未初始化。
刪除double*
以引用成員變量。
成員變量matData
尚未初始化,因此取消引用它會導致分段錯誤。
停止在構造函數中聲明局部變量matData
,該變量matData
了成員變量,並在取消引用成員變量之前對其進行了初始化。
其他說明有:
delete[]
而不是delete
來刪除通過new[]
分配的內容。 我不明白為什么您不僅僅使用std::vector<>
,它可以根據需要分配和刪除未使用的內存,這也是安全的。 它也像任何其他數組一樣工作,例如std::vector<int> myArray;
填充后,您可以將其用作myArray.at(0);
或myArray[0];
。 另外std::vector<>
知道它的大小,這可以派上用場。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.