Я столкнулся с проблемой, когда работает мое «TEST INSIDE BUILD», но не «TEST OUTSIDE». Фрагмент кода здесьСтруктурные указатели ведут себя по-разному в двух разных функциях, не уверены, почему
command_t build_op_command(unsigned code, command_t comone, command_t comtwo)
{
commad_t s;
s=malloc(sizeof(*s));
switch(code)
{
case 5:
s->type=SEQUENCE_COMMAND;
...
}
s->status=-1;
s->input=NULL;
s->output=NULL;
s->u.command[0]=comone;
s->u.command[1]=comtwo;
printf("TEST INSIDE BUILD: %d and %s",s->u.command[0]->type, s->u.command[0]->u.word[0]);
s->u.word=NULL;
s->u.subshell_command=NULL; //not yet implemented
return s;
}
и
...
command_t op_command;
op_command=build_op_command(op_pop(op_s),comone,comtwo);
printf("TEST OUTSIDE: %d and %s",op_command->u.command[0]->type,op_command->u.command[0]->u.word[0]);
...
command_t является указателем для команды STRUCT. Я не совсем уверен, почему он правильно работает внутри функции сборки, но не работает правильно за ее пределами. Любой вход был бы весьма признателен. Я столкнулся с ошибкой сегментации, я попытался выделить пространство для s-> u.word, но это ничего не помогло.
struct command
{
enum command_type type;
int status;
char *input;
char *output;
union
{
struct command *command[2];
char **word;
struct command *subshell_command;
} u;
};
typeder struct command *command_t;
Действительно ли это 'u' союз? –
Да, извините за туманность. Кодирование получилось чрезвычайно тяжелым, и я не могу понять, что происходит. Возможно, мне нужно будет выделить пространство для объединения, но это не имеет смысла, потому что я сохраняю u.word в порядке без проблем. – Jack
Вы столкнетесь с той же проблемой, если переместите свой тест после 's-> u.word = NULL;', это не имеет никакого отношения к функциям. –