c - 嵌套 union 和结构程序不起作用

标签 c

我正在使用 mingw 编译器。该程序已成功编译,但在执行时,程序停止工作。请指出错误以及可能的调试方法。

#include<stdio.h>
#include<conio.h>

typedef struct
{
 int a;
 int b;
} two;

typedef union
{
 int c;
 float d;
} ad;

typedef struct
{
 int a;
 int b;
 two l;
 ad *n; 
} one;

void trr(one *p);

int main() 
{
 one tr; 
 tr.a=3;
 tr.b=3;
 tr.l.a=5;
 tr.l.b=6;
 tr.n->d=5.43;
 trr(&tr);
 printf("a: %d\nb: %d\nl.a: %d\nl.b: %d\nunion: %f",tr.a,tr.b,tr.l.a,tr.l.b,tr.n->d);
 return 0;
}

void trr(one *p)
{
 p->a=(*p).a+1;
 p->l.a=p->l.a*2;
} 

最佳答案

typedef struct
{
 int a;
 int b;
 two l;
 ad *n; 
} one;

....

 tr.n->d=5.43;

n 成员是一个未初始化的指针。您需要使用 malloc() 为其分配内存或为其分配现有变量的地址。

如果您提高警告级别,编译器会警告您有关未初始化的变量。

关于c - 嵌套 union 和结构程序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24402409/

相关文章:

c - 包含内部指针的 union 的内存分配如何

c - 基于堆栈的缓冲区的缓冲区溢出预防

python - 为什么允许字符串文字的连接?

c - 在 C 中留下一个无限的 while 循环

c - 使用C在程序中计数标签

c - 如果包含另一个句子字符串,则从中删除该单词字符串

c - 处理需要访问特权端口 < 1024 的应用程序的标准方法是什么?

c - 使用 fread() 将文件中的文本存储在字符数组中

c - C 中 pthread 的线程函数计时问题

c++ - 如何让 gcc/g++ 接受像 LOBYTE(v15) = someExpression 这样的表达式?