2011-07-24 42 views
1

我必須創建一個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]; 
} 

及主要調用此函數:

createArray(3); 

但是當我運行它,我不斷收到「細分故障「,我不知道爲什麼

我該如何解決這個問題?

+0

*人將會導致第一SEGV。 – Petesh

+0

您正在創建一個指向二維字符數組的指針,這與char指針的兩維數組完全不同(真的!)。你要哪個? –

回答

3

如果您使用的是C++,請考慮使用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

哦,我的話它的工作!非常感謝!我一直在努力解決這一整天! – Tim

+0

在這種情況下,你應該將答案標記爲接受:)無論哪種方式,很高興我可以幫助! –

+0

'人[j]'是'j'正確嗎?不應該是'我'嗎? – 19greg96

0

不要使指針成爲全局指針。 但我是這一行尷尬......

*persons = new char * int[n]; 

我不認爲這是正確的。 '*'在這裏是額外的。也許,這是對的?

persons = new char * int[n]; 

但我不完全清楚。

+0

甚至... persons = new char * [n] – Pace

0

我應該評論說,而不是一個多維數組,它聽起來像你應該使用一個結構數組,成員的名字和姓氏。

+0

這不回答這個問題!他問的是分段故障,而不是他應該如何設計它。 – kravemir