Ошибка сегментации при назначении целого числа указателю

Я пытаюсь присвоить значение узла указателю, но gdb выдает ошибку сегментации при запуске кода. Что я могу сделать?

void biggerPotion(No* node, int bottleSize, int *aux){
        if (node == NULL)
            return;
        maiorPocao(node>left, bottleSize, aux);
        maiorPocao(node->right, bottleSize, aux);
        if ((node->value >=  garra) && (node-> value < *aux))
            *aux = node->value;      //here is the issue
    }

Другие важные части кода:

for(i=0; i< nBottles;i++){
        a = 1000;             //i declared that 
        biggerPotion(potions,bottleSize[i],&a);
    }

Я понимаю, что райз — это корень, но гарра переводится как коготь. Есть ли лучший португальский перевод для этого?

paxdiablo 07.04.2019 04:03

Извините, гарра - это сокращение от "гаррафа", что означает бутылка.

João Victor Vilar 07.04.2019 04:07

Нам нужно достаточно кода, чтобы воспроизвести ошибку. Удалите как можно больше кода, убедившись, что оставшийся код по-прежнему воспроизводит ошибку.

David Schwartz 07.04.2019 04:15

Я снял рекурсивную часть, и все равно получил ту же ошибку

João Victor Vilar 07.04.2019 04:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, так как ошибочная строка:

*aux = node->value;

тогда проблема либо aux, либо node (потому что это единственные два указателя, которые разыменовываются в этой строке).

Я бы распечатал их оба перед выполнением этого блока if, чтобы быть уверенным:

fprintf(stderr, "node is %p, aux is %p\n", node, aux);

Учитывая широкое использование node и малое использование aux, именно наверное вызывает проблему, и в этом случае вам следует проверить, что вы передаете вызову верхнего уровня biggerPortion. Вы должны опубликовать этот вызов верхнего уровня, включая объявление любой переменной, которую вы передаете.

В любом случае вы можете проверить это, просто изменив:

*aux = node->value;

в:

{
    int temp = node->value;
}

Если проблема исчезнет, ​​то это определенно указатель aux как-то не так. Убедитесь, что вы являются действительно передаете указатель, например:

int myVar;
biggerPotion(rootNodePtr, 42, &myVar);

Итак, я попробовал и получил следующее: «узел — 006D0E58, вспомогательный — 00401D00».

João Victor Vilar 07.04.2019 04:18

@João: извините, поймал меня на середине редактирования. Это, конечно, выглядит разумно - 0x06... и 0x04... кажутся возможными как память кучи и стека, но конкретно они не нулевые). Было бы удобно также увидеть начальный вызов функции (включая объявление переменной, которую вы передаете).

paxdiablo 07.04.2019 04:20

Это начальное объявление: «большее зелье (зелья, размер бутылки [i], aux);

João Victor Vilar 07.04.2019 04:22

@João: а заявление aux? Если это int, вам нужно пройти &aux.

paxdiablo 07.04.2019 04:25

По какой-то причине все значения, которые я получаю от *aux print, являются адресами. Пробовал передавать a, aux и aux.

João Victor Vilar 07.04.2019 04:29

Только что попробовал { int temp = node->value; } И никаких проблем!

João Victor Vilar 07.04.2019 04:32

Привет, только что разобрался... кажется, в моем тестовом printf я на самом деле печатал адрес aux, а не *aux! Спасибо за помощь :)

João Victor Vilar 07.04.2019 04:45

Другие вопросы по теме