2011-08-05 14 views
1

私はポインタとメモリの私の理解をテストするための小さな例を書いたが、私はこれがうまくいくだろうと確信していたが、それはseg faultを与えた。 追加:他のコードでこのコードを実行しました。なぜこのコードはセグメンテーションフォールトを与えますか?

#include <iostream> 
using namespace std; 

struct Card { 

    int a; 
    Card(int a) : a(a) { } 

}; 

int main() { 

    int **p; 
    int **p2; 
    int *a; 
    int b =3; 
    char ** cArray; 
    Card **c = new Card*[5]; 
    for (int i = 0; i<5; i++) 
    c[i] = new Card(1); 


    a = &b; 
    for (int i = 0; i< 10; i++) { 
    p = &a; 
    // p2[i] = new int; 
    *(cArray + i) = "string"; 
    cout << cArray[i]<< endl; 
    } 



    for (int i = 0; i< 10; i++) { 
    // p2[i] = a; 
    cout << *a << endl; 
    } 

}  
+0

私のために働く - どのコンパイラとOSを使用していますか?実際のsegフォルトメッセージを投稿できますか? –

+0

@ Mark-メモリリーク以外は、何も問題はありません。 – Mahesh

+0

これは私にとってはsegfaultではありません(g ++/Linux上)。 – wallyk

答えて

3
char ** cArray; 

cArrayはポインタへのポインタです。それを参照解除することはできません。

*(cArray + i) = "string"; 
+0

メインからカード部分を取り除いたとき、どのようにセグフルトがなかったのですか? – Mark

+2

セグメンテーションフォールトは、未定義の動作を持つランタイムエラーです。あなたが不運な場合は、すべてのものが正しいかのように動作します。 – Mahesh

1

cArray未初期化。これを訂正してください。

char ** cArray = new char*[10]; 
0

cArray変数が初期化されていないようです。

関連する問題