Ошибка сегментации при назначении целого числа указателю - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь присвоить значение моего узла указателю, но 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);
    }

1 Ответ

0 голосов
/ 07 апреля 2019

Хорошо, поскольку ошибочная строка:

*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);
...