Мой код продолжает сбой при выполнении *arr = malloc(i * sizeof(struct cluster_t*));
. Кластер - это структура. Я не уверен, в чем проблема. Второй вход представляет собой массив структур (кластеров) Предполагается, чтобы загрузить текстовый файл в массив, каждая строка в виде отдельной структуры первый вход является .txt файл, содержащий этот:Сбой программы при выполнении malloc
count=20
40 86 663
43 747 938
47 285 973
49 548 422
52 741 541
56 44 854
57 795 59
61 267 375
62 85 874
66 125 211
68 80 770
72 277 272
74 222 444
75 28 603
79 926 463
83 603 68
86 238 650
87 149 304
89 749 190
93 944 835
Здесь часть кода, который, кажется, вышел из строя (я изменил его немного после первого ответа) Это не полный код:
int load_clusters(char *filename, struct cluster_t **arr) //nefunkcne
{
assert(arr != NULL);
char buffer_load[256] = {'0'};
int riadok = 0;
int count = 0;
int *X = malloc(sizeof(int));
if (X == NULL) {
perror("Chyba mallocu na load_clusters X");
free(X);
exit(EXIT_FAILURE);
}
int *Y = malloc(sizeof(int));
if (Y == NULL) {
perror("Chyba mallocu load_clusters Y");
free(X);
free(Y);
exit(EXIT_FAILURE);
}
int *ID = malloc(sizeof(int));
if (ID == NULL) {
perror("Chyba mallocu v load_clusters ID");
free(X);
free(Y);
free(ID);
exit(EXIT_FAILURE);
}
FILE *subor = fopen(filename, "r");
if (subor == NULL) {
perror("Chyba nacitania suobru fopen load_clusters!");
}
while (fgets(buffer_load, sizeof buffer_load, subor) != NULL) {
if (riadok > 0) {
struct cluster_t shluk;
sscanf(buffer_load,"%d %d %d", ID, X, Y);
init_cluster(&shluk, 1);
struct obj_t objekt;
objekt.id = *ID;
objekt.x = *X;
objekt.y = *Y;
append_cluster(&shluk, objekt);
arr[riadok - 1] = malloc(sizeof(struct cluster_t*));
if (arr[riadok-1] == NULL) {
perror("Chyba mallocu v load_clusters 388!");
free(arr[riadok - 1]);
exit(EXIT_FAILURE);
}
(*arr)[riadok - 1] = shluk;
} else {
sscanf(buffer_load, "count=%d", &count);
*arr = malloc(count * sizeof(struct cluster_t));
if (arr == NULL) {
perror("Chyba mallocu v load_clusters 400!");
free(*arr);
exit(EXIT_FAILURE);
}
}
riadok++;
}
fclose(subor);
free(X);
free(Y);
free(ID);
return cout;
}
Полный код я в курсе (не забудьте использовать `-std = c99 - Wextra -Wall -Werror -DNDEBUG, а также -lm, если в gcc из-за математической библиотеки): https://docs.google.com/document/d/1xoNcBpY1lkmki3-E5WUYFVg-xojjvEkUJ63XC_UzhtM/edit?usp=sharing
Комментарии не для широкого обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/130349/discussion-on-question-by-luk164-program-crashes-when-malloc-executed). –
всегда хорошо, чтобы показать, что из указанных структур –