最初に、この質問はある時点で答えられていることを知っていると言うことから始めましょう。そうでなければならなかったのですが、それに対する答えを見つけるためのキーワードがわかりません。
私はプログラムを書いていますが、プログラム内で動的にサイズ変更された複数の配列をあちこちに作成し、それらを 1 つのグランド構造体に格納する必要があります。したがって、同じタイプの動的に割り当てられた配列を作成する必要がある場合は、構造体フィールドに関数で作成します (つまり、宣言し、malloc し、それを返します)。しかし、私が道を進んでいる今、私は大きな欠陥を作ったと思います。私がしたことは関数のスコープによって破壊されたと思います。つまり、関数が完了すると、元のポインターが強制終了されるため、構造体はもはや「私のもの」ではないアドレスへのポインターになります。以下は、関数のサンプル呼び出しです。コメントがなくても意味があることを願っています。
//Call from main()
current_event->mens_names = create_names_matrix(number_of_couples, 20);
//my "create_names_matrix" function:
char ** create_names_matrix(int num_of_names, int length_of_names){
int i;
char **return_matrix;
return_matrix = malloc(num_of_names * sizeof(char*));
if(return_matrix == NULL){
panic("return_matrix"); //Panic is a function that checks if malloc failed
}
for(i = 0; i < num_of_names; i++){
return_matrix[i] = malloc(length_of_names * sizeof(char));
}
if(return_matrix[i-1] == NULL){
panic("return_matrix"); //Panic is a function that checks if malloc failed
}
return return_matrix;
}
解決策は、メインの各フィールド配列を宣言して動的に作成し、それを各「create_xxx_matrix」関数にパラメーターとして渡して、関数のスコープが完了した後にそれらが強制終了されないようにすることですか?
これは初歩的な質問であることは知っていますが、ポインターと c を使用してからしばらく経ちました。
ありがとう!