矩阵的动态分配使程序无法响应

时间:2015-04-06 11:10:27

标签: c++ dynamic matrix allocation

我已查看已发布的大部分问题,似乎无法找到解决办法:<

这是我的问题。我有以下图表类(仅包含相关代码):

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以防万一...我真的不知道问题是什么..我之前已经完成了矩阵的动态分配,但这从未发生过。希望这篇文章是可读的。

1 个答案:

答案 0 :(得分:0)

在指针指向某个东西之前,你不能取消引用它。 A永远不会被初始化,但是你会这样做:

*A = new int[n];

此(*A)正在取消引用。在取消引用之前,您需要将A设置为指向某个内容。