多次元配列を返す関数を定義しました。
行の割り当て
arr = (char **)malloc(size);
列の割り当て (ループ内)
arr[i] = (char *)malloc(v);
戻り値の型は char** です
メモリの解放を除いて、すべて正常に動作します。関数によって返された配列で free(arr[i]) および/または free(arr) を呼び出すと、クラッシュします。
編集:
関数の割り当て
pole = malloc(zaznamov);
char ulica[52], t[52], datum[10];
float dan;
int i = 0, v;
*max = 0;
while (!is_eof(f))
{
get_record(t, ulica, &dan, datum, f);
v = strlen(ulica);
pole[i] = malloc(v);
strcpy(pole[i], ulica);
pole[i][v-1] = '\0';
if (v - 1 > *max)
{
*max = v;
}
i++;
}
return pole;
関数を呼び出しているメインの部分
pole = function();
メモリ解放
int i;
for (i = 0; i < zaznamov; i++)
{
free(pole[i]);
pole[i] = NULL;
}
free(pole);
pole = NULL;