C++ 字符指针的2D数组-->分段错误?

C++ 字符指针的2D数组-->分段错误?,c++,pointers,char,segmentation-fault,new-operator,C++,Pointers,Char,Segmentation Fault,New Operator,我必须创建一个二维字符指针数组。数组将存储名称和姓氏的列表-第0行将保存名称,第1行保存姓氏。这是我迄今为止编写的代码。该文件包含在主文件中: #include "myFunction.h" #include <iostream> #include <string.h> using namespace std; char ***persons; void createArray(int n) { *persons = new char * int[n];

我必须创建一个二维字符指针数组。数组将存储名称和姓氏的列表-第0行将保存名称,第1行保存姓氏。这是我迄今为止编写的代码。该文件包含在主文件中:

#include "myFunction.h"
#include <iostream>
#include <string.h>

using namespace std;

char ***persons;

void createArray(int n)
{
   *persons = new char * int[n];
   for(int i=0; i<n; i++)
      *persons[i]=new char[n];
}
但是当我运行它的时候,我不断地遇到分段错误,我不知道为什么


如何解决此问题?

不要将指针设为全局指针。 我对这句话感到尴尬

*persons = new char * int[n];
我认为这是不对的这里额外收费。也许,这是对的

persons = new char * int[n];

但我不太清楚

不要将指针设为全局指针。 我对这句话感到尴尬

*persons = new char * int[n];
我认为这是不对的这里额外收费。也许,这是对的

persons = new char * int[n];

但我不太清楚

我应该指出,与多维数组不同,你应该使用一个结构数组,成员代表名字和姓氏。

我应该指出,与多维数组不同,你应该使用一个结构数组,用名字和姓氏的成员。

如果你使用C++,考虑使用一个二维数组的STD::String,因为它会稍微干净一些。此外,多维数组总是很难使用,因为它们会使代码无法读取,并导致大量混乱,因为您不会经常被哪个维度代表什么而弄糊涂。因此,我强烈敦促您考虑使用一个结构,每个人有2个字段,第一个名字和一个姓氏。 不管怎样,如果你想采用你的方法,以下是你的方法:

char*** people;

int n = 2;  // two elements, name and surname
int m = 5;  // number of people

people = new char**[m];
for (int i = 0; i < m; i++) {
  people[i] = new char*[n];
}

如果你使用C++,考虑使用一个二维数组的STD::String,因为它会稍微干净一些。此外,多维数组总是很难使用,因为它们会使代码无法读取,并导致大量混乱,因为您不会经常被哪个维度代表什么而弄糊涂。因此,我强烈敦促您考虑使用一个结构,每个人有2个字段,第一个名字和一个姓氏。 不管怎样,如果你想采用你的方法,以下是你的方法:

char*** people;

int n = 2;  // two elements, name and surname
int m = 5;  // number of people

people = new char**[m];
for (int i = 0; i < m; i++) {
  people[i] = new char*[n];
}

*persons将导致第一个segv。您正在创建一个指向二维字符数组的指针,这与二维字符指针数组完全不同!。您想要哪个?*persons将导致第一个segv。您正在创建指向二维字符数组的指针,这与二维字符指针数组完全不同!。你想要哪一个?甚至。。。persons=新字符*[n]或甚至。。。噢,我的话,它起作用了!非常感谢你!我一整天都在努力解决这个问题!哦,我的话,它起作用了!非常感谢你!我一整天都在努力解决这个问题!这并不能回答问题!!他问的是分割错误,而不是他应该如何设计它。这并不能回答问题!!他问的是分割错误,而不是他应该如何设计它。