2012-02-26 6 views
0

プログラムのコンパイル中にエラーが発生しました。コードは次のようである: -エラー2次元配列のメモリを動的に割り当てるときに、2次元配列の動的メモリ割り当てを実装しています。

# include<iostream> 
    # include<stdio.h> 
    # include<conio.h> 
    # include<stdlib.h> 
    # define COLS 5 
    using namespace std; 

    typedef int Rowarray[COLS]; 
    int main() 
    { 
     Rowarray *rptr; 
     int nrows=3; 
     int row,col; 
     rptr=(int**)malloc(nrows * COLS * sizeof(int)) ; // Error Line 
     for(row=0;row<nrows;row++) 
     { static int i=0; 
     for(col=0;col <COLS;col++,i++) 
     { 
      rptr[row][col]=i; 
     } 
     } 
     for(row=0;row<nrows;row++) 
     { 
     for(col=0;col <COLS;col++) 
     { 
      cout << "\n" << rptr[row][col]; 
     } 
     }  
    getch(); 
    return 0; 
    } 

私は取得していますエラーが `割り当てでcannot convert int**' toのint(*)[5]」である

+1

なぜ、 'new'ではなく' malloc'を使用していますか? – Cameron

+0

@camron私は新しいものを使うことができますが、mallocの場合にこれらを型キャストする方法を学びたいと思っています – Invictus

+0

'malloc(nrows * COLS * sizeof(int))'は私を強制的に変換しようとしているvoid * int **演算子の左辺はint **型です。それはエラーですか? – Invictus

答えて

1

mallocの左側にあるキャスト(かっこ)を削除してみてください。それでも問題が解決しない場合は、(Rowarray *)に置き換えてください。

+0

Mineは古いコンパイラなので、最新のANSI機能がないため、型キャストする必要がありました。修正済みです:) – Invictus

1

あなたの構文が間違っている、とC/C++はあなたを聞かせていませんとにかく配列型にキャストします。

あなたRowarrayは、おそらくint**のtypedefをする必要がありますので、あなたが言うことができます。

rptr=(int**)malloc(nrows * COLS * sizeof(int)) ; 

をより一般的に、あなたはので宿題か何かのあなたに課せられる要件がない限り、あなたはこれをやっていることは、過度のですハードな方法。代わりにmallocと生のポインタを使用しての、あなたのプログラムのコンパイルも実行し、通常のnew

rptr= new Rowarray[nrows]; 

であなたの醜いmallocを交換する場合は、簡単std::vector<std::vector<int> >

+0

(int **)はここでは機能しません。私はそれを試みた:)。しかし、私はダビデの回答を通してそれを固定しました – Invictus

+0

はい、あります。 'typedef'文を' typedef int ** Rowarray;に変更する必要があります。 –

+0

そうでしょう:) – Invictus

3

とのダイナミックな2D配列を作成することができます。そして、delete [] rptr;を忘れないでください。

なぜベクターを使用しないのですか?

#include <vector> 
//... 
std::vector<std::vector<int> >rptr; 
関連する問題