我一直遇到一个常规的2d数组要填充我有Complex()的基类的问题。我在派生类matrix()的构造函数中初始化了数组,我确保我正确地填充它,但无论我做什么,我都会收到错误。我一直在获取访问冲突写入位置,这可能意味着数组没有正确初始化,而我正在写的数据被写入CPU。这是我的Matrix.h文件
#pragma
#ifndef MATRIX_H
#define MATRIX_H
#include "Complex.h"
#include "stdafx.h"
#include <iostream>
using namespace std;
class Matrix : public Complex
{
private:
Complex **a;
double real;
double imag;
double length, width;
public:
Matrix(): real( 0.0 ), imag( 0.0 ) {}
void setMatrix(int b , int c) {
int i, j;
a=new Complex*();
length=b, width=c;
for(int k=0;k<b;k++)
for(int p=0; p<c; p++)
a[k]=new Complex();
for (i = 0; i <= b; i++)
for (j = 0; j<= c; j++)
a[i][j].setImag(rand() % 100);
a[i][j].setReal(rand() % 100);
}
Matrix add( const Matrix & ) const;
void print() const;
void setMatrix(int b, int c) const;
};
#endif
这是我的Matrix.cpp文件
#include <iostream>
using namespace std;
#include "Matrix.h"
Matrix Matrix::add( const Matrix &c ) const
{
Matrix result;
result.setMatrix(2,2);
int i,j;
for(i=0; i<c.length; i++) {
for(j=0; j<c.width;j++) {
result.a[i][j].setImag(a[i][j].getImag() + c.a[i][j].getImag());
result.a[i][j].setReal(a[i][j].getReal() + c.a[i][j].getReal());
}
}
return result;
}
void Matrix::print() const {
for(int i=0; i<length; i++) {
for(int j=0; j<width; j++) {
cout << "(" << a[i][j].getReal() << "," << a[i][j].getImag() << ")/n";
}
}
}
任何帮助将不胜感激!
答案 0 :(得分:2)
我甚至不会尝试修复此代码中的所有错误,因此您将遇到更多问题,但就内存分配而言
a=new Complex*();
仅分配单个复合体,因此只有a[0]
有效。必须用
a=new Complex*[length];
同样如此
a[k]=new Complex();
必须替换为
a[k]=new Complex[width];
所以setMatrix
中的分配变为:
void setMatrix(int b , int c)
{
length=b;
width=c;
a=new Complex*[length];
for(int k=0;k<length;k++)
{
a[k]=new Complex[width];
}
}
注意:
using namespace std
。using namespace std
<强> live on Coliru 强>