C++ C++;-指针的重新分配指针上的空闲崩溃
这是我第一次来这里,我对编码很陌生。 我想做一个矩阵类C++ C++;-指针的重新分配指针上的空闲崩溃,c++,pointers,C++,Pointers,这是我第一次来这里,我对编码很陌生。 我想做一个矩阵类 //Matrix.hpp #ifndef __MATRIX_H__ #define __MATRIX_H__ class Matrix{ private: unsigned int m_row, m_column; unsigned int** matrix; public: Matrix(unsigned int row, unsigned int column); ~Matrix(); voi
//Matrix.hpp
#ifndef __MATRIX_H__
#define __MATRIX_H__
class Matrix{
private:
unsigned int m_row, m_column;
unsigned int** matrix;
public:
Matrix(unsigned int row, unsigned int column);
~Matrix();
void transposeMatrix();
void fill(unsigned int x);
void fill_x(unsigned int row, unsigned int column, unsigned int x);
void setMatrix(unsigned int** mat);
bool isValid(unsigned int row, unsigned int column);
unsigned int getRowNum();
unsigned int getColumnNum();
unsigned int get_x(unsigned int row, unsigned int column);
unsigned int** getMatrix();
};
#endif
在Matrix.cpp文件中:
#include <cstdlib>
#include <cstdbool>
#include "Matrix.hpp"
bool Matrix::fail = false;
Matrix::Matrix(unsigned int row, unsigned int column){
m_row=row;
m_column=column;
matrix = new unsigned int*[row];
for(int i=0; i<row; i++){
matrix[i]=new unsigned int[column];
for(int j=0; j<column; j++){
matrix[i][j]=0;
}
}
}
Matrix::~Matrix(){
for(int i=0; i < m_row; i++){
free(matrix[i]);
matrix[i]=NULL;
}
free(matrix);
matrix=NULL;
}
void Matrix::transposeMatrix(){
Matrix tmp_matrix(m_column, m_row);
for(int i=0; i < m_row; i++){
for(int j=0; j< m_column; j++){
tmp_matrix.fill_x(j, i, this->get_x(i, j));
}
}
this->setMatrix(tmp_matrix.getMatrix());
unsigned int tmp = m_row;
m_row = m_column;
m_column = tmp;
}
void Matrix::setMatrix(unsigned int** mat){
for(int i=0; i < m_row; i++){
free(matrix[i]);
matrix[i]=NULL;
}
free(matrix);
matrix=NULL;
matrix=mat;
}
unsigned int** Matrix::getMatrix(){
return matrix;
}
void Matrix::fill(unsigned int x){
for(int i=0; i<m_row; i++){
for(int j=0; j<m_column; j++){
matrix[i][j]=x;
}
}
}
void Matrix::fill_x(unsigned int row, unsigned int column, unsigned int x){
if(row>= m_row||column>=m_column) return;
matrix[row][column]=x;
}
bool Matrix::isMatch(unsigned int x, unsigned int y){
if (x==y) return true;
return false;
}
bool Matrix::isValid(unsigned int row, unsigned int column){
if(row<m_row&&column<m_column) return true;
return false;
}
unsigned int Matrix::get_x(unsigned int row, unsigned int column){
if(isValid(row, column)) return matrix[row][column];
throw "Invalid matrix index exception.";
}
unsigned int Matrix::getRowNum(){
return m_row;
}
unsigned int Matrix::getColumnNum(){
return m_column;
}
输出是
[some random number] 0
[some random number] 0
30 30
问题在于,当转置函数结束时,析构函数在tmp_矩阵上被调用,从而删除了它的矩阵指针,它也被实矩阵容器指向
已经修好了。谢谢大家。尽管被否决有点令人沮丧。但也许这真的是一个愚蠢的问题。您可以为已分配的内存地址分配一个指针,然后释放它。您可以使用同一个指针,分配一个已分配的不同内存地址并释放该地址。您应该执行“if(ptr!=0){free()…}”,如果使用new[]进行分配,则应该使用delete[]
[some random number] 0
[some random number] 0
30 30