2011-07-24 2 views
1

Je dois créer un tableau bidimensionnel de pointeurs char. Le tableau va stocker une liste de noms et de noms de famille - la rangée 0 contiendra les noms et la rangée 1 les noms de famille. Voici le code que je l'ai écrit à ce jour (ce fichier est inclus dans le fichier principal):Tableau 2D des pointeurs char -> Défaut de segmentation?

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

et principaux appels cette fonction avec:

createArray(3); 

mais quand je le lance, je continue à recevoir " Segmentation Fault "et je ne sais pas pourquoi

Comment puis-je résoudre ce problème?

+0

* personnes va provoquer le premier SEGV. – Petesh

+0

Vous créez un pointeur vers un tableau à deux dimensions de caractères, quelque chose de complètement différent d'un tableau à deux dimensions de pointeurs char (vraiment!). Lequel veux-tu? –

Répondre

3

Si vous utilisez C++, pensez à utiliser un tableau 2D de std :: string car il sera un peu plus propre. En outre, les tableaux multidimensionnels sont toujours horribles à utiliser car ils rendent le code illisible et causent beaucoup de chaos (comme vous ne vous trompez pas souvent par la dimension qui représente quoi). Donc, je vous conseille fortement d'utiliser une structure pour chaque personne (avec 2 champs, prénom et nom).

Peu importe, si vous voulez aller avec votre approche, voici comment vous le faire:

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

oh ma parole ça a marché! Merci beaucoup! J'ai essayé d'arranger ça toute la journée! – Tim

+0

Dans ce cas, vous devez marquer la réponse comme acceptée :) De toute façon, heureux que je puisse vous aider! –

+0

'people [j]' est 'j' correct? ne devrait-il pas être «je»? – 19greg96

0

Ne pas rendre les pointeurs globaux. Je suis embarassed avec cette ligne ...

*persons = new char * int[n]; 

Je ne pense pas que ce soit juste. '*' est extra ici. Peut-être, c'est vrai?

persons = new char * int[n]; 

Mais je ne sais pas exactement.

+0

Ou même ... personnes = new char * [n] – Pace

0

Je devrais faire remarquer qu'au lieu d'un tableau multidimensionnel, il semble que vous devriez utiliser un tableau de structures, avec des membres pour le prénom et le nom de famille.

+0

Cela ne répond pas à la question !! Il a demandé à propos de la faute de segmentation pas sur la façon dont il devrait le concevoir. – kravemir

Questions connexes