LoliDeveloper
@LoliDeveloper
Линейная алгебра как смысл жизни

Почему указатель становится нулём?

main_queue это указатель на структуру очереди, объявлен глобально и инициализируется в Main

Main:
Task firstTask = CreateTask(0, array_size - 1); //создаю задачу
printf("main_queue = %d\n", main_queue); //main_queue = 13571288 
                                    //это указатель поэтому цифры адекватные
push(&(firstTask)); //кладу в очередь, 
                 //но не кладётся поскольку main_queue становится равен нулю втф
printf("First task pushed\n");


push():
void push(Task* new_task)
{
        printf("Enter in push()\n");//самое самое начало
        printf("main_queue = %d\n", main_queue);// ВЫВОДИТ НОЛЬ

Я не понимаю почему он становится нулём.
  • Вопрос задан
  • 194 просмотра
Пригласить эксперта
Ответы на вопрос 2
svsd_val
@svsd_val
Разработчик & администратор M$, GNU/Linux
По логике вещей Вы вызываете каким то образом PUSH до самого присвоения ссылки main_queue, таким образом у вас инициализация переменной main_queue проходит а вот ссылка в ней записывается позже чем вызывается PUSH...
Ответ написан
LoliDeveloper
@LoliDeveloper Автор вопроса
Линейная алгебра как смысл жизни
even if you don't assign anything, it is going to be assigned to zero by default

Not a good practise. number is basically on stack. If you are assigning global pointer to stack address, it becomes invalid when the function exits..!!

Источник

UPD: Оказалось что я два раза объявлял его...
1 раз глобально, и 1 раз локально. Локальному присваивал значение и оно улетучивалось.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
16 нояб. 2024, в 01:00
3000 руб./в час
15 нояб. 2024, в 23:33
20000 руб./за проект
15 нояб. 2024, в 23:11
1000 руб./за проект