Я пытаюсь присвоить значение узла указателю, но 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);
}
Извините, гарра - это сокращение от "гаррафа", что означает бутылка.
Нам нужно достаточно кода, чтобы воспроизвести ошибку. Удалите как можно больше кода, убедившись, что оставшийся код по-прежнему воспроизводит ошибку.
Я снял рекурсивную часть, и все равно получил ту же ошибку
Хорошо, так как ошибочная строка:
*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: извините, поймал меня на середине редактирования. Это, конечно, выглядит разумно - 0x06...
и 0x04...
кажутся возможными как память кучи и стека, но конкретно они не нулевые). Было бы удобно также увидеть начальный вызов функции (включая объявление переменной, которую вы передаете).
Это начальное объявление: «большее зелье (зелья, размер бутылки [i], aux);
@João: а заявление aux
? Если это int
, вам нужно пройти &aux
.
По какой-то причине все значения, которые я получаю от *aux print, являются адресами. Пробовал передавать a, aux и aux.
Только что попробовал { int temp = node->value; }
И никаких проблем!
Привет, только что разобрался... кажется, в моем тестовом printf я на самом деле печатал адрес aux, а не *aux! Спасибо за помощь :)
Я понимаю, что райз — это корень, но гарра переводится как коготь. Есть ли лучший португальский перевод для этого?