2011-08-05 85 views
1

我寫了一個小例子來測試我對指針和內存的理解,但是我確信這會起作用,但是它給了seg錯誤......任何想法我做錯了什麼? 添加:我用其他代碼運行此代碼。爲什麼此代碼給出分段錯誤?

#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

它適用於我 - 你使用的是什麼編譯器和操作系統?你能發佈實際的seg故障信息嗎? –

+0

@標記 - 除內存泄漏之外,代碼沒有任何問題。 – Mahesh

+0

這對我來說不是segfault(在g ++/Linux上)。 – wallyk

回答

3
char ** cArray; 

cArray是unintialized指針的指針。你不能去引用它。

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

當我從主體中刪除卡部分時,怎麼會有沒有seg故障? – Mark

+2

分段錯誤是具有未定義行爲的運行時錯誤。如果你不走運,它表現得好像每一件事都是正確的。 – Mahesh

1

cArray未初始化。改正這一點。

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

cArray變量似乎沒有被初始化。

相關問題