2D массив указателей на символы -> Ошибка сегментации? - PullRequest
1 голос
/ 24 июля 2011

Мне нужно создать двумерный массив указателей на символы.В массиве будет храниться список имен и фамилий - строка 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);

, но когда я ее запускаюя продолжаю получать "Ошибка сегментации", и я понятия не имею, почему

Как я могу это исправить?

Ответы [ 3 ]

3 голосов
/ 24 июля 2011

Если вы используете c ++, рассмотрите возможность использования 2D-массива std :: string, так как это будет немного чище.Кроме того, с многомерными массивами работать всегда ужасно, так как они делают код нечитаемым и вызывают много хаоса (так как вы не часто путаетесь с тем, какое измерение что представляет).Поэтому я настоятельно рекомендую вам рассмотреть возможность использования структуры для каждого человека (с 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];
}
0 голосов
/ 24 июля 2011

Я должен прокомментировать, что вместо многомерного массива звучит так, как будто вы должны использовать массив структур с членами для имени и фамилии.

0 голосов
/ 24 июля 2011

Не делайте указатели глобальными. И я смущен этой строкой ...

*persons = new char * int[n];

Я не думаю, что это правильно. «*» здесь лишнее. Может быть, это правильно?

persons = new char * int[n];

Но я точно не знаю.

...