как получить доступ к элементу указателя вложенной структуры в коде c из другого файла - PullRequest
0 голосов
/ 15 января 2019

Ниже приведен полный код

Краткое описание моей проблемы ниже: У меня есть одна глобальная структура, как упомянуто ниже в file1.c, и она инициализируется с некоторым значением в file1.c функцией "assign_value ()", и теперь я печатаю это значение функцией "print_value ()" из file2.c.

Проблема в том, что: не печатается правильное значение из file2.c, с другой стороны, если я вызываю "print_value ()" из file1.c внутри функции "assign_value ()", как упомянуто ниже, тогда он показывает правильное значение.

Пожалуйста, подскажите, что мне не хватает, почему я не могу напечатать правильное значение, вызвав функцию print_value () в file2.c

  file1.c

My_struct_one - это вложенная структура, содержащая другую структуру My_struct_two, а my_struct_obj_global - глобальная переменная в file1.c

    //file1.c

    #include <stdio.h>

    #include "file1.h"

    typedef unsigned long int List;

    typedef struct
    {

     List* my_list;
    }My_struct_two;


     typedef struct
    {

     My_struct_two struct_two;
    }My_struct_one;


     My_struct_one struct_global;



      void assign_value()
     {
     List value=9;

     struct_global.struct_two.my_list = &value;
     print_value();
     }

    void print_value()
    {
    printf("inside print");
    printf("value=%u\n",*(struct_global.struct_two.my_list));
    }

file1.h //file.h

  #ifndef _file1_c

  #define _file1_c

  void print_value();
  void assign_value();

  #endif

file2.c #include

  #include "file1.h"

  int main()

  {

  assign_value();

  print_value();

  return 0;

   }

ВЫВОД: внутри printvalue = 9 внутреннее значение печати = 4195506

У меня сомнение, почему я не могу получить доступ к значению из file2.c,

1 Ответ

0 голосов
/ 15 января 2019
  • value является локальной переменной в функции assign_value(). Он создается при входе в функцию и уничтожается при выходе из функции.

  • В функции print_value() значение struct_global.struct_two.my_list является висящим указателем: его значение является адресом переменной, которой больше не существует.

  • Разыменование значения висящего указателя является неопределенным поведением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...