簡體   English   中英

返回數組中的值時的C ++訪問沖突讀取位置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM