Я пишу программу, которая читает из текстового файла и пытается динамически создать структуру.Не удается разрешить повреждение кучи во время выполнения
Так у меня есть следующий код, чтобы сделать это:
typedef struct tgraph {
int vertex_count;
int edge_count;
struct tvertex **adj;
} Graph;
typedef struct tvertex {
int n; /* vertex number */
char course[255];
struct tvertex *next;
} Vertex;
Graph g_graph;
void create_graph(FILE *fd)
{
int vertex_count;
int edge_count;
fscanf(fd, "%i", &vertex_count);
fscanf(fd, "%i", &edge_count);
printf("Vertices: %i\n", vertex_count);
printf("Edges: %i\n", edge_count);
g_graph.vertex_count = vertex_count;
g_graph.edge_count = edge_count;
g_graph.adj = malloc(sizeof(Vertex *));
Vertex **vlist = g_graph.adj;
int i;
for (i = 0; i < vertex_count; i++) {
Vertex *vertex = malloc(sizeof(Vertex));
fscanf(fd, "%i,%[^\n]", &vertex->n, vertex->course);
printf("%i %s\n", vertex->n, vertex->course);
*vlist = vertex;
vlist ++;;
}
}
Я звоню эту функцию create_graph
и получаю эту ошибку во время выполнения
поврежден дважды связанный список: 0x00000000007d7240
Это вызвано основной функцией вызовом fclose(fd)
. Я знаю, что проблема в том, что я развращаю кучу. Моя арифметика указателя, вероятно, неверна, но я не могу ее решить.
Я компилирую с gcc в linux.
Отлично, это сработало! Спасибо, я что-то вроде этого что-то скрывал, но я не был уверен, и мне было непонятно. Ваш ответ очистил меня. – kaneda