2011-08-05 46 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变量似乎没有被初始化。

相关问题