c++ - 构造函数问题<无法读取内存>

标签 c++ visual-c++

我必须创建一个直方图类并对此类进行操作。输入可以是一维数组或二维数组。当我将数组转换为矩阵时出现问题。这是我到目前为止所尝试过的。错误是 <Unable to read memory>

直方图.h

#ifndef HISTOGRAM_H
#define HISTOGRAM_H
#include<iostream>
class Histogram
{
private:
    int** matrix;
    int lines;
    void SortMatrix();
public:
    Histogram(){ }
    Histogram(int elements[], int elementsNr);
    Histogram(int** m, int l);
    void Print();
};
#endif

直方图.cpp

#include"histogram.h"
using namespace std;
Histogram::Histogram(int** m, int l)
{
    matrix=m;
    lines=l;
    SortMatrix();
}

Histogram::Histogram(int elements[], int elementsNr)
{
    lines=0;
    //initialize matrix : elementrNr lines and 2 columns
    int** matrix=new int*[elementsNr];
    for(int i=0;i<elementsNr;i++)
    {
        matrix[i]=new int[2];
        matrix[i][0]=INT_MIN;
        matrix[i][1]=INT_MIN;
    }
    //search each element from the array in the matrix
    bool found=false;
    for(int i=0;i<elementsNr;i++)
    {
        found=false;
        for(int j=0;j<elementsNr;j++)
        {
            //the element was found in the matrix ( on the first column )
            if(matrix[j][0] == elements[i])
            {
                matrix[j][1]++;
                found=true;
                break;
            }
        }
        if(!found)
        {
            matrix[lines][0]=elements[i];
            matrix[lines][1]=1;
            lines++;
        }
    }
    SortMatrix();
}
void Histogram::SortMatrix()
{
    bool flag=true;
    int temp;
    for(int i=0;(i<lines) && flag;i++)
    {
        flag=false;
        if(matrix[i+1][0]>matrix[i][0])
        {
            temp=matrix[i][0];
            matrix[i][0]=matrix[i+1][0];
            matrix[i+1][0]=temp;
            flag=true;
        }
    }
}
void Histogram::Print()
{

    for(int i=0;i<lines;i++)
    {
        cout<<matrix[i][0]<<" : " <<matrix[i][1]<<endl;
    }

}

主要.cpp

#include"histogram.h"
#include<iostream>
using namespace std;

int main()
{
    int arr[]={6,7,3,1,3,2,4,4,7,5,1,1,5,6,6,4,5};
    Histogram h(arr,17);
    h.Print();
}

最佳答案

这里

int** matrix=new int*[elementsNr];

替换为

matrix=new int*[elementsNr];

因为matrix已经是成员变量了。您正在创建一个名为 matrix 的新临时变量双指针并为其分配内存,而不是为您的成员变量 matrix

关于c++ - 构造函数问题<无法读取内存>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13440987/

相关文章:

c++ - Libevent套接字客户端示例

c++ - 在 C++ 中插入一个 Trie

c++ - 更改窗口中的标签

c# - 未调用 WH_KEYBOARD_LL Hook

c++ - 模板类的二元运算符不解决隐式转换

c++ - 为在 OpenGL 中使用基本物理和渲染寻找一个好的形状类设计

c++ - 如果它是未定义的行为,为什么编译器会警告返回对本地堆栈变量的引用?

c++ - 子类的动态方法在 lambda 捕获中使用时调用父类的虚方法/导致段错误

C 预处理器和 "_asm _emit"指令

java - 从 C++ 回调 Java 方法