二维char指针数组 - >分段故障?

时间:2011-07-24 15:09:21

标签: c++ pointers char segmentation-fault new-operator

我必须创建一个2维的char指针数组。该数组将存储名称和姓氏列表 - 第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];
}

和main调用此函数:

createArray(3);

但是当我运行它时,我不断收到“Segmentation Fault”,我不知道为什么

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

如果您正在使用c ++,请考虑使用std :: string的2D数组,因为它会更清晰一些。此外,多维数组总是很糟糕,因为它们使代码不可读并导致很多混乱(因为你不经常会被哪个维度代表什么混淆)。因此,我强烈建议您考虑为每个人使用结构(包含2个字段,first_name和last_name)。

无论如何,如果你想采用你的方法,你可以这样做:

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];
}

答案 1 :(得分:0)

不要指针全局。 我对这条线感到尴尬......

*persons = new char * int[n];

我不认为这是对的。 '*'在这里是额外的。也许,这是对的吗?

persons = new char * int[n];

但我不确切知道。

答案 2 :(得分:0)

我应该评论一下,而不是一个多维数组,听起来你应该使用一个结构数组,其中包含名字和姓氏的成员。