Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Kolya123
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 2
1

Топологическая сортировка, ошибка выделения памяти malloc

19.10.2017, 08:32. Просмотров 302. Ответов 0
Метки нет (Все метки)

Добрый день, товарищи.
Сочиняю топологическую сортировку, сборка проходит удачно, но возникает ошибка на месте:
"nodePointer input = (nodePointer)malloc(sizeof(struct node));".
Ошибка - "Необработанное исключение по адресу 0x777E3B9B (ntdll.dll) в ConsoleApplication2.exe: 0xC0000374: Куча была повреждена (параметры: 0x777FEDD8)."
Не могу понять почему. Буду очень благодарен за помощь.

input.txt
7 10
1 2
1 3
2 3
2 4
3 5
4 6
5 4
5 6
7 3
7 5


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include<stdio.h>
#include<stdlib.h>
typedef struct node* nodePointer;
struct node
{
    int data;
    nodePointer next;
    nodePointer end;
};
nodePointer list;
nodePointer sort;
int *p;
int *c;
void dfs_visit(int i)
{
    int n;
    c[i] = 1;
    nodePointer temp_dfs;
    if (list[i].next)
    {
        temp_dfs = list[i].next;
        while (temp_dfs->next)
        {           
            if (c[temp_dfs->data] == 0)
            {
                p[temp_dfs->data] = i;
                dfs_visit(temp_dfs->data);
            }
 
            temp_dfs = temp_dfs->next;
        }
        if (c[temp_dfs->data] == 0)
        {
            p[temp_dfs->data] = i;
            dfs_visit(temp_dfs->data);
        }
    }
    c[i] = 2;
    nodePointer input = (nodePointer)malloc(sizeof(*input));
    input->data = i;
    input->next = NULL;
    input->end = NULL;
    if (!sort->next)
    {
        sort->next = input;
        sort->end = input;
    }
    else
    {
        input->next = sort->next;
        sort->next = input;
    }   
}
void dfs(int vertex)
{
    int i;
    for (i = 1; i <= vertex; i++)
    {
        c[i] = 0;
        p[i] = -1;
    }
    for (i = 1; i <= vertex; i++)
    {
        if (c[i] == 0)
            dfs_visit(i);
    }
}
int main()
{
    int vertex, edge, i;
    int head, tail;
    nodePointer curr, temp, temp_sort;
    FILE* f;
    fopen_s(&f, "input.txt", "r");
    fscanf_s(f, "%d %d", &vertex, &edge);
    p = (int *)malloc(sizeof(int) * (vertex + 1));
    c = (int *)malloc(sizeof(int) * (vertex + 1));
    list = (nodePointer)malloc(sizeof(struct node) * (vertex + 1));
    for (i = 1; i <= vertex; i++)
    {
        list[i].data = 0;
        list[i].next = NULL;
        list[i].end = NULL;
    }
 
    for (i = 0; i < edge; i++)
    {
        fscanf_s(f, "%d %d", &head, &tail);
        curr = (nodePointer)malloc(sizeof(struct node));
        curr->data = tail;
        curr->end = NULL;
        curr->next = NULL;
 
        if (!list[head].end)
        {
            list[head].next = curr;
            list[head].end = curr;
        }
        else
        {
            list[head].end->next = curr;
            list[head].end = curr;
        }
    }
 
    for (i = 1; i <= vertex; i++)
    {
        printf("%d ", i);
        temp = &list[i];
        while (temp->next)
        {
            printf("-> %d ", temp->next->data);
            temp = temp->next;
        }
        printf("\n");
    }
    sort = (nodePointer)malloc(sizeof(nodePointer));
    sort->data = 0;
    sort->next = NULL;
    sort->end = NULL;
    dfs(vertex);
    for (i = 1; i <= vertex; i++)
    {
        printf("%d ", p[i]);
    }
    printf("\n");
    temp_sort = sort->next;
    while (temp_sort ->next!= NULL)
    {
        printf("%d ", temp_sort->next->data);
        temp_sort = temp_sort->next;
    }
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2017, 08:32
Ответы с готовыми решениями:

Malloc ошибка освобождения памяти
ЧЯДНТ? Косяк такой: heap corruption detected before normal block (№0) at 0x... CRT detected...

Ошибка выделения памяти под массив
Есть двумерный массив. Создается он таким образом: int **createArray(int m, int n) { int i,...

Топологическая сортировка на Си!!!!
Народ!Помогите хоть кто-нибудь с курсовой работой на Си!!! Мне нужно сделать программу на тему...

Топологическая сортировка графа
Здравствуйте, у меня есть код сортировки, но он слишком громоздкий, помогите его сделать более...

Распределение памяти для выделения и освобождения блоков памяти внутри запрошенного пула
В программе малые&quot;дыры&quot; избегают,что нужно сделать что бы малые &quot;дыры&quot; не избегались.... #...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2017, 08:32

Понять динамическое распределение памяти (malloc)
Пытаюсь понять динамическое распределение памяти, но пока безрезультатно. Написал код: ...

Динамическое выделение памяти, нужен ли <malloc.h>?
если используешь функцию malloc, обязательно перед этим подключать соответствующую библиотеку...

Компилятор ругается на выделение памяти malloc
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;locale.h&gt; /* СТУДЕНТ: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru