gpt4 book ai didi

c++ - munmap_chunk() : invalid pointer in C++ program

转载 作者:行者123 更新时间:2023-11-28 05:55:39 32 4
gpt4 key购买 nike

我收到错误“munmap_chunk():无效指针”,我不知道为什么。当我使用 MultipliedByMatrix 方法时出现问题。无法正确删除用该方法创建的矩阵。

#include "matrix.h"

Matrix::Matrix(int matr_size) {
size = matr_size;
Matr = new int *[size];
for(int i = 0; i < size; i++)
Matr[i] = new int[size];

for(int i = 0 ; i < size; i++)
for(int j = 0; j < size; j++)
Matr[i][j] = rand() % 100;
std::cout << "New matrix is created" << std::endl;
}

Matrix::~Matrix() {
for(int i = 0; i < size; i++)
delete[] Matr[i];
delete[] Matr;
Matr = NULL;
std::cout << "Matrix is deleted" << std::endl;
}

Matrix Matrix::MultipliedByMatrix(Matrix OtherMatr) {
Matrix new_matr = Matrix(this->GetSize());
int new_value;

for(int i = 0 ; i < size; i++)
for(int j = 0; j < size; j++) {
new_value = 0;
new_value += Matr[j][i] * OtherMatr.GetValue(i, j);
new_matr.SetValue(i, j, new_value);
}
return new_matr;
}

int Matrix::GetSize() {
return size;
}

int Matrix::GetValue(int i, int j) {
return Matr[i][j];
}

void Matrix::SetValue(int i, int j, int value) {
Matr[i][j] = value;
}

最佳答案

你写了Matrix吗?自己上课?如果是这样,我敢打赌问题是您没有复制或移动构造函数。如果是这样,编译器将为您生成一个。这将复制 size 和 Matr 的值但它不会创建指向数组的拷贝。当你写:

    return new_matr;

这创建了一个新矩阵(使用复制构造函数 - 它只是复制指针),然后调用 new_matr 的析构函数(删除指向的内存)。调用函数然后处理垃圾内存,当它试图最终删除结果时,一切都会崩溃

您还需要编写一个移动赋值运算符。

或者将 Matr 设为 std::vector<int> (长度为 'size' 的平方),然后写:

int Matrix::GetValue(int i, int j) {
return Matr[i*size+j];
}

(其他功能也类似)。 std::vector有一个适当的复制和移动构造函数,以及适当的赋值行为 - 所以它都会正常工作。 (它也会快很多——你保存了整个指针间接寻址。)

关于c++ - munmap_chunk() : invalid pointer in C++ program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34208194/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com