我已查看已发布的大部分问题,似乎无法找到解决办法:<
这是我的问题。我有以下图表类(仅包含相关代码):
class Graph{
protected:
int **A;
int n;
public:
Graph(){
A=NULL;
n=0;};
~Graph(){
int i;
if(n)
for(i=0;i<n;i++)
delete [] A[i];
delete A;
n=0;};
// Methods
friend istream& operator>>(istream&,Graph&);
friend void operator>>(fstream,Graph&);
friend ostream& operator<<(ostream&,Graph&);
friend void operator<<(fstream,Graph&);
int GetA(int i,int j){
return A[i][j];}
int Getn(){
return n;}
void Setn(int k){
n=k;}
void SetA(int i,int j,int k){
A[i][j]=k;}
void AllocA();
};
这是主要做的事情,直到收到错误:
int main(){
Graph graphA;
"input.txt">>graphA;
}
“input.txt”包含:
9
0 1 1 0 0 0 0 0 0
1 0 0 1 1 0 0 0 0
1 0 0 0 0 0 0 1 1
0 1 0 0 0 0 0 0 0
0 1 0 0 0 1 0 0 0
0 0 0 0 1 0 1 0 0
0 0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0
重载(文件)&gt;&gt;朋友:
void operator>>(char *fis_in,Graph &graph){
int k,x;
ifstream fin(fis_in);
fin>>k;
graph.Setn(k);
graph.AllocA();
int i,j;
for(i=0;i<k;i++)
for(j=0;j<k;j++){
fin>>x;
graph.SetA(i,j,x);}
cls; // #define cls system("cls"), just for convenience
cout<<"Done !";
delay(1); // Irrelevant, just a 1 second delay
fin.close();
}
最后,给出错误的方法是AllocA:
void Graph::AllocA(){
int i;
*A = new int[n];
for(i=0;i<n;i++)
A[i] = new int[n];}
更明确地说,它被卡在* A = new int [n];
上我已经检查了n,它是从文件中读取的,它的值是9,就像它应该的那样..我也尝试手动设置为9以防万一...我真的不知道问题是什么..我之前已经完成了矩阵的动态分配,但这从未发生过。希望这篇文章是可读的。
答案 0 :(得分:0)
在指针指向某个东西之前,你不能取消引用它。 A
永远不会被初始化,但是你会这样做:
*A = new int[n];
此(*A
)正在取消引用。在取消引用之前,您需要将A
设置为指向某个内容。