2016-07-07 2 views
0

私は基本的なC++演習を行っています。これは私のコードである文字列を初期化するときのEAccess違反

...私はchar型の行列にいくつか記載されている単語を渡す必要がありますが、私は行列を初期化する問題を抱えている:

class Cahorcado 
{ 
    public: 
     //functions 
     Cahorcado(void); 
     private: 
     char** palabra; 
};   
Cahorcado::Cahorcado(void) 
{ 
    for(int i=0;i<26;i++) 
    { 
     for(int i2=0;i2<255;i2++) 
     { 
      palabra[i2][i]=' '; //i'm getting the error over here 
     } 
    } 
} 

私は、「イー・アクセス違反」エラーを取得しています。.. I cantは文字列を使用し、charまたはAnsiString(C++ビルダー)でなければなりません。 imがchar行列を良いと宣言するかどうかわかりません。私は心の中に持っている何 は次のようなものです:

{'H','e','l','l','o', , 
'W','o','r','l','d', , 
    , , , , , , 
    , , , , , , } 

(ちょうど作るためのアイデア)

http://pastebin.com/gBQvED5h < - あなたのクラスの開始時に完全なコード(スペイン語警告

+0

ヒント:たとえば、あなたがあなたの文字行列を格納するstd::vector<std::vector<char>>オブジェクトを使用することができ、その後、あなたのクラスは次のようになりますあなたのポインタが指しているものと考えます。 – juanchopanza

+2

あなたが 'palabra = new char * [26];'と26 'palabra [i] = new char [255];' sまたは類似の隠蔽をしていなければ、配列の記憶域を割り当てていません。 – user4581301

+0

'char ** palabra;'を 'char palabra [255] [26];に変更すると、その時点でクラッシュすることはなくなりました。しかし、あなたが投稿しなかったコードのどこかでまだクラッシュする可能性があります。 – dxiv

答えて

2

コンストラクタを使用する場合は、配列ストレージを割り当てるために次のようなコードを用意する必要があります。

palabra = new char*[rows]; 
for (std::size_t i = 0; i < rows; ++i) 
    palabra[i] = new char[cols]; 

ここで、rowscolsは、それぞれ2D配列の行数と列数を表します。

は、その後、あなたのデストラクタであなたは、動的に割り当てられたメモリを破壊し、メモリリークを回避するために、

for (std::size_t i = 0; i < rows; ++i) 
    delete[] palabra[i]; 
delete[] palabra; 

が必要になります。

上記はきわめて古いC++ですが、これを行うためのより良い方法は、メモリの割り当てと割り当て解除を内部的に処理するSTLコンテナを使用する方法です。

class Cahorcado { 
public: 
    // create char matrix with each element initialised with ' ' 
    Cahorcado(std::size_t rows, std::size_t cols) 
     : palabra(rows, std::vector<char>(cols,' ')) {} 

private: 
    std::vector<std::vector<char>> palabra; 
}; 
+0

Hum ...コンパイラは、 "Bodyは既に関数用に定義されています" Cahorcado :: Cahorcado(unsigned int、unsigned int) '" –

+0

私はあなたのcppファイルに' Cahorcado :: Cahorcado(std :: size_t rows、std :: size_t cols) 'を定義しようとしていて、上記のコードをコピーしたときに既にクラス宣言で定義していたと思う。 – drescherjm

+0

so ...クラス宣言に 'Cahorcado(std :: size_t rows、std :: size_t cols) :palabra(rows、std :: vector (cols、 '')){}' {} " 間違っている? –

関連する問題