|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家好,我在看 C 的 结构体部分的知识,在自己写代码测试 用结构体指针 p->member 的方式给结构体初始化的时候碰到了 Segmentation fault 的问题:
代码如下:- #include <stdio.h>
- int main() {
- char s = 'a';
- struct {
- int len;
- char *str;
- } *p;
- printf("hello world\n");
- p->len = 100;
- p->str = &s;
- printf("*p->str: %c\n", *p->str);
- return 0;
- }
复制代码
运行结果如下:
- $ gcc -g lab.c
- $ ./a.out
- hello world
- Segmentation fault (core dumped)
复制代码
现在神奇的事情是,当我添加一行 初始化一个 int 类型的无关的变量后,程序就能运行了,代码如下:
- #include <stdio.h>
- int main() {
- char s = 'a';
- struct {
- int len;
- char *str;
- } *p;
- int c = 11; // 随便一个变量,随便赋一个初值
- printf("hello world\n");
- p->len = 100;
- p->str = &s;
- printf("*p->str: %c\n", *p->str);
- return 0;
- }
复制代码
运行结果如下:
- $ gcc -g lab.c
- $ ./a.out
- hello world
- *p->str: a
复制代码
我不理解。。。反汇编看了一下,第二个代码只是栈那里多了16个字节用来存 int c,其他地方实在没发现有什么线索。。。
所以想问一下这个现象的原因是什么?谢谢大家了! |
|