gpt4 book ai didi

c - 结构指针在两个不同的函数中表现不同,不知道为什么

转载 作者:行者123 更新时间:2023-11-30 19:16:44 25 4
gpt4 key购买 nike

我遇到了一个问题,我的“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 command 的指针。我不太确定为什么它在构建函数内可以正确工作,但在构建函数之外却无法正常工作。任何投入将不胜感激。我遇到了段错误,我尝试为 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;

最佳答案

您没有提供足够的信息,请发布 command_t 的定义。

u 可能是一个 union :

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]);

在第一个 printf 之后,初始化此union 的其他成员并覆盖命令:

s->u.word=NULL;
s->u.subshell_command=NULL; //not yet implemented

下一个printf报告不同的内容。

union 的所有成员共享内存中的同一位置,一次不能使用多个成员。

关于c - 结构指针在两个不同的函数中表现不同,不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29595889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com