2011-07-24 18 views
1

私は、charポインタの2次元配列を作成する必要があります。配列には名前と姓のリストが格納されます。行0は名前を保持し、行1は姓を保持します。 「2次元配列のcharポインタ - >セグメンテーションフォルト?

createArray(3); 

が、私はそれを実行したとき、私は得続ける:

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

とメインの呼び出しはこの関数を:これは私が(このファイルは、メインファイルに含まれている)、これまでに書いたコードですセグメンテーションフォールト "と私は理由がわからない

どうすればこの問題を解決できますか?

+0

者が最初にSEGVを引き起こすことが起こっています*。 – Petesh

+0

charの2次元配列へのポインタを作成しています.2次元配列のcharポインタとはまったく異なります(実際は!)。どちらがいいですか? –

答えて

3

C++を使用している場合は、std :: stringの2D配列を使用することを検討してください。これは少しきれいです。また、多次元配列はコードを読むことができず、多くの混乱の原因となります(どの次元が何を表すかによって混同されることは稀です)。だから、私は強く各人(構造体first_nameとlast_nameの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]; 
} 
+0

ああ私の言葉は働いた!どうもありがとうございます!私は一日中これを修正しようとしてきました! – Tim

+0

その場合は、回答を受け入れたものとしてマークする必要があります:)いずれにせよ、うれしいことに私は助けてくれました! –

+0

'people [j]'は 'j'が正しいですか?それは '私は'ではないでしょうか? – 19greg96

0

グローバルなポインタを作成しないでください。 そして私は、この行で恥ずかしいのです...

*persons = new char * int[n]; 

私はそれが正しいだとは思いません。 '*'は余分です。多分、それは正しいですか?

persons = new char * int[n]; 

しかし、私は正確にはわかりません。

+0

またはさらに... 人=新しいchar * [n] – Pace

0

多次元配列の代わりに、構造体の配列を使用する必要があります。名前と姓のメンバを使用する必要があります。

+0

これは質問に答えることはできません!彼はどのように彼がそれを設計すべきかについてではなく、セグメンテーションの失敗について尋ねた。 – kravemir