24
Ноя
2020

Вызвано нарушение доступа для чтения. current было 0x5

Возникла такая ошибка. Не знаю как её решить. Пожалуйста, помогите. Писал программу на языке С. Программа создаёт список из строки целых чисел. Ввод заканчивается после ввода элемента, отличной от числа. Программа удаляет элемент списка, который равен сумме своих соседей. (Я знаю, что не реализовал удаление первого и последнего элемента списка) Вот мой код:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#define N 10000

typedef int Data;

typedef struct Node {
    Data data;
    struct Node* next;
}   Node;
//-----------------------------------------------------------------------------
void push(Node** list, Data data) {
    Node* node = malloc(sizeof(Node));
    node->data = data;
    node->next = *list;
    *list = node;
}
//-----------------------------------------------------------------------------
void printList(const Node* list) {
    if (list) {
        printList(list->next);
        printf("%d ", list->data);
    }
}
int Delete(Node ** Head, int i) {
    int j;
    int retval = -1;
    Node * current = *Head;
    Node * tmp_node = NULL;
    for (j = 0; j < i; j++) current = current->next; \\ ошибка в этой строке
    tmp_node = current->next;
    retval = tmp_node->data;
    current->next = tmp_node->next;
    free(tmp_node);
    return retval;
}
//-----------------------------------------------------------------------------
int main() {
    setlocale(LC_ALL, "Rus");
    int i, j, m, n = 0, A[N];
    char str[N];
    printf("Введите строку\n");
    fgets(str, 1000, stdin);
    for (j = 0; str[j] != '\0'; j++) {
        if ((str[j] >= '0') && (str[j] <= '9')) n++;
    }
    if (n < 3) {
        printf("List is empty");
        return 0;
    }
    m = strlen(str);
    i = 0;
    for (j = 0; j < m; j++) {
        if ((str[j] >= '0') && (str[j] <= '9')) {
            A[i] = str[j] - 48;
            i++;
        }
    }
    //printf("Массив\n");
    //for (i = 0; i < n; i++) printf("%d ", A[i]);
    Node* list = NULL;
    printf("Список\n");
    for (i = n - 1; i >= 0; i--) push(&list, A[i]);
    for (i = 1; i < n - 1; i++) if (A[i] == A[i - 1] + A[i + 1]) Delete(&A[n - 1], i - 1);
    printList(list);
    putchar('\n');
    return 0;
}

Вот скрин [1]: https://i.stack.imgur.com/RPp8r.png

Источник: https://ru.stackoverflow.com/questions/1209271/%D0%92%D1%8B%D0%B7%D0%B2%D0%B0%D0%BD%D0%BE-%D0%BD%D0%B0%D1%80%D1%83%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0-%D0%B4%D0%BB%D1%8F-%D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F-current-%D0%B1%D1%8B%D0%BB%D0%BE-0x5

Тебе может это понравится...

Добавить комментарий