Почему на моих кодовых блоках не отображается вывод? - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь реализовать связанный список (в конце узла) в code :: blocks 17.12, но там не отображается никакого вывода. Этот код показывает мне черный экран вывода со следующим сообщением в моих журналах:

-------------- Сборка: Отладка в Удалить дублирующееся значение в Связанном Список (компилятор: GNU G CC Compiler) ---------------

mingw32-g ++. Exe -Wall -fexceptions -g - c "C: \ Users \ hp \ Desktop \ CPP Программирование \ Удалить дублирующееся значение в связанном списке \ main. cpp "-o obj \ Debug \ main.o mingw32-g ++. Exe -o" bin \ Debug \ Delete значение-дубликата в Linked List.exe "obj \ Debug \ main.o
Выходной файл: bin \ Debug \ Удалить значение-дубликата в Linked List.exe размером 1,51 МБ Процесс завершен со статусом 0 (0 минут) , 1 секунда (-ы) 0 ошибка (-и), 0 предупреждение (я) (0 минут, 1 секунда)

------------- - Выполнить: отладка в Delete duplicate-value in Linked List (компилятор: GNU G CC Compiler) ---------------

Проверка существования: C : \ Users \ hp \ Desktop \ CPP Программирование \ Удалить дублирующееся значение в связанном списке \ bin \ Debug \ Удалить дублирующееся значение в связанном списке.exe Выполняется: "C: \ Program Files (x86) \ CodeBlocks / cb_console_runner.exe "" C: \ Users \ hp \ Desktop \ CPP Программирование \ Удалить дублирующееся значение в связанном списке \ bin \ Debug \ Удалить дублирующееся значение в связанном List.exe "(в C: \ Users \ hp \ Desktop \ CPP Программирование \ Удалить дублирующееся значение в связанном списке.) Процесс завершен со статусом -1073741510 (0 минут, 10 секунд)

#include <iostream>
#include<stdlib.h>
#include<bits/stdc++.h>
#include<conio.h>

using namespace std;

struct Node
{
    int data;
    Node *next;
};
void pushinorder(struct Node** head, int new_data)
{
    struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
    struct Node *temp = *head;
    new_node->data = new_data;
    new_node->next = NULL;
    if(*head==NULL)
    {
        *head = new_node;
        return;
    }
    while(temp->next!=NULL)
    {
        temp = temp->next;
    }
    temp->next = new_node;
    return;
}

void PrintList(struct Node* head)
{
    struct Node *temp = head;
    while(temp!=NULL)
    {
        cout<<temp->data<<" ";
        temp=temp->next;
    }

}

int main()
{
struct Node *head = (struct Node*)malloc(sizeof(struct Node));

pushinorder(&head,1);
pushinorder(&head,1);
pushinorder(&head,1);
pushinorder(&head,2);
pushinorder(&head,2);
pushinorder(&head,3);
pushinorder(&head,3);
pushinorder(&head,3);
pushinorder(&head,3);
pushinorder(&head,4);
PrintList(head);
getch();
return 0;

Ответы [ 2 ]

0 голосов
/ 10 января 2020

Ваш код предположительно зависает, код возврата -1073741510 или 0xc000013a указывает, что вы нажали ctrl- c, чтобы закрыть приложение.

head->next не инициализировано. Вы должны использовать new вместо malloc и добавить конструктор к Node, который инициализирует next в null:

struct Node
{
    int data;
    Node *next;
    Node(): next(nullptr) {}
};
0 голосов
/ 10 января 2020

Проблема, кажется, заключается в следующем:

struct Node *head = (struct Node*)malloc(sizeof(struct Node));

Внутри функции pushinorder это означает, что *head будет не нулевым указателем, а также что члены из *head (и, следовательно, temp) будет иметь неопределенные (и, казалось бы, случайные или мусорные) значения. Использование неинициализированных элементов *head приведет к неопределенному поведению .

Простое решение - инициализировать head нулевым указателем:

Node *head = nullptr;
...