Вот моя проблема: у меня есть матрица 2d char, с которой я malloc с функцией. После этого, я хочу, чтобы получить карту из файла, но я получил ошибку сегментации прямо там, и я не знаю, почему ... Вот пример кода:C - malloc или fgets, я не знаю, что не работает
// struct where I put the map and others informations from the
typedef struct problem_t
{
char *nom;
Coordonnees arrivee, depart;
int nb_ligne, nb_col;
char **
} Problem;
// Function wich malloc the map
int mallocCarte(char *** carte, int nbLigne, int nbCol)
{
*carte = malloc(nbLigne * sizeof(char*));
if (*carte == NULL)
{
return false;
}
int i;
for (i = 0; i < nbLigne ; ++i)
{
(*carte) [i] = malloc(nbCol * sizeof(char));
if ((*carte) [i] == NULL)
{
return false;
}
}
return true;
} // mallocCarte ()
// Code sample, I've already got the others informations, now, I'd like to get the map
// On commence par reserver l'espace memoire reserve à la carte.
int res = mallocCarte(&problem->carte, problem->nb_ligne, problem->nb_col);
// Si l'allocation s'est mal passée, on renvoie un message
if (res == false)
{
exc.num_Exc = MALLOC_ERROR;
exc.msg_Err = "Erreur lors de l'allocation mémoire de la carte";
return exc;
}
printf("Recuperation de la carte 2 ...%d %d\n", problem->nb_ligne,
problem->nb_col);
int nbLi = 0;
int nbCol = 0;
while (fgets(fromFile, 1, file) != NULL && nbLi < problem->nb_ligne)
{
if (fromFile [0] == '\n')
{
nbCol = 0;
++nbLi;
continue;
}
if (nbCol == problem->nb_col)
{
printf("malformed input file!\n");
exit(-1);
}
(problem->carte) [nbLi] [nbCol++] = fromFile [0];
}
Прошло много дней, и я на самом деле не знаю, что делать ... Я был бы так любезен Если кто-то мог мне помочь!
Спасибо Вам
(Вот исходный файл, где я беру информацию. Сначала они проблемно имя, то некоторые координаты, и, наконец, размер карты. В конце файла карты https://dl.dropbox.com/u/56951442/map.txt)
Это даже компиляция? .. У меня есть некоторые сомнения относительно строки 'char **' объявления 'struct'. – dasblinkenlight
Вам не нужно указывать возвращаемое значение 'malloc' в программе C. И 'sizeof (char)' is '1'. –
Если вы хотите вернуть 2d-массив через параметр out, для этого параметра нужен тип 'char ***'.Тогда ваше первое задание выглядит как 'carte * = (char **) malloc (nbLigne * sizeof (char *));' – jpm