Почему этот конкретный код дает исключение? - PullRequest
0 голосов
/ 15 декабря 2018

Обнаружена критическая ошибка c0000374

#pragma once

typedef struct node
{
int value;
node* next;
node* before;
}   node;

void print_nodes(node* list) {
node *current = (node*)malloc(sizeof(node));
//current->value = 0;
current->next = list;

while (current->next != nullptr) {
    printf("%i\n", current->next->value); <-THROW an Exception in the Fist loop
    current->next = current->next->next;
}
free(current);
}

void add_node(node* list) {

}

inline void new_nodes(node* list, size_t anzahl) {
list[0].before = NULL;
for (int i = 0; i <= anzahl; i++) {
    list[i].value = i + 1;
    list[i].next = &list[i + 1];
    list[i + 1].next = &list[i - 1];
}
list[anzahl].next = NULL;
}

Оператор printf создает исключение ... но только иногда.Мой cpp вызывает функцию new_nodes с size_t = 10, поэтому она не может быть слишком большой.

Дополнительная информация один раз, даже когда куча "сломалась".

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 16 декабря 2018

this:

void print_nodes(node* list) 
{
    node *current = (node*)malloc(sizeof(node));
    //current->value = 0;
    current->next = list;

    while (current->next != nullptr) 
    {
        printf("%i\n", current->next->value); <-THROW an Exception in the Fist loop
        current->next = current->next->next;
    }
    free(current);
}

Требуется сильная модификация: Предложить:

модифицировано (после разъяснения ОП) для использования связного списка без заголовка

void print_nodes(node* list) 
{ 
    node * current = list; 

    while (current) 
    { 
        printf("%i\n", current->value); 
        current = current->next; 
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...