Как использовать структуру в структуре? - PullRequest
0 голосов
/ 17 февраля 2010

Это может быть пустым вопросом, но я не могу понять, что я делаю неправильно (я не использовал две структуры друг в друге).

У меня есть две структуры:

struct test
{
    struct ddata* difference;
    int diff;
};
struct test *MSG; 

struct ddata  
{
    char *filename;
    char *size;
};
struct ddata *difference

И я хочу дать им значения таким образом (и моя программа зависает здесь):

  MSG->difference = difference;  
  MSG->diff = diff;

Так что я делаю не так?

Заранее спасибо!

Kampi

EDIT:

Переменная структуры разности создается в одной из моих функций (и там я хочу дать значение моей структуре MSG). Переменная структуры MSG объявлена ​​глобально (я не знаю, уместно ли это). Значение разницы объявляется и заполняется следующим образом:

struct ddata *difference = (struct ddata *) malloc( dif * sizeof *difference );    
memset( difference, 0, dif * sizeof *difference ); 
...
...
...
difference[diff].filename = strdup( primary[i].filename );
difference[diff].size = strdup( primary[i].size );
diff++;

Я надеюсь, что дал вам то, что вам нужно.

Ответы [ 3 ]

2 голосов
/ 17 февраля 2010

Вы инициализируете MSG перед его использованием? Он должен указать какое-то действительное место, прежде чем что-либо будет назначено на него. Один из способов сделать это -

MSG = malloc (sizeof *MSG);

Тогда было бы правильно установить поля в * MSG, как вы делаете.

1 голос
/ 17 февраля 2010

Может быть, вы забыли сделать что-то вроде этого:

MSG = (test* )malloc(sizeof(test));

0 голосов
/ 17 февраля 2010

Также не забудьте позвонить

free(MSG);

Также вы можете проверить свой код, используя Valgrind, который обнаружил бы этот дамп стека. Вот любой пример.

valgrind -v --tool=memcheck --leak-check=full --track-origins=yes ./your_application

Надеюсь, это поможет,

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