为什么这个代码给出分段错误

Why does this code give segmentation fault?

本文关键字:分段 错误 代码 为什么      更新时间:2023-10-16

我写了一个小例子来测试我对指针和内存的理解,但是我确信这会起作用,但是它给了segfault…知道我做错了什么吗?

#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;
  }
}    
char ** cArray;

cArray是一个未初始化的指针指向指针。不能取消引用

*(cArray + i) = "string";

cArray未初始化。正确。

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

数组变量似乎没有初始化。