惊了 这警告和 Segmentation fault: 11 是咋回事???????

2019-07-06 17:53:02 +08:00
 b00tyhunt3r

#include <iostream> using namespace std;</iostream>

typedef struct test* t;
struct test
{
 int v;
 struct test* next;
};

int main()
{
  t a;
  a->v=1;
  a->next =nullptr;
    }

编译居然莫名其妙报了一个警告:

test.cpp:18:3: warning: variable 'a' is uninitialized when used here [-Wuniniti
alized]

a->v=1;

^

test.cpp:14:6: note: initialize the variable 'a' to silence this warning

t a;

^

= NULL

1 warning generated.

好吧 如他所愿改成

t a=NULL;

结果看的我直接迷了,Segmentation fault:11

????????

4736 次点击
所在节点    C
7 条回复
ashong
2019-07-06 17:55:39 +08:00
对象不 new 当然 sf 了
owt5008137
2019-07-06 17:58:43 +08:00
a 都没赋值过就直接用了,当然警告了
wevsty
2019-07-06 17:59:39 +08:00
a 只是个指针,没初始化不知道指向的是什么玩意,就这样赋值当然会 Segmentation fault
owt5008137
2019-07-06 18:00:33 +08:00
赋值 NULL 话就变成 a-v=1 ;尝试对 0x00-0x04 进行写入,当然 segment fault 了
littlewing
2019-07-06 18:00:51 +08:00
先买本 c 程序设计语言打好基础再来写代码,现在的年轻人啊,还没学会走就想跑了 https://item.m.jd.com/product/12580612.html?wxa_abtest=o&utm_source=iosapp&utm_medium=appshare&utm_campaign=t_335139774&utm_term=CopyURL&ad_od=share
glacer
2019-07-06 18:02:27 +08:00
t a = malloc(sizeof(struct test));
bumz
2019-07-06 18:31:15 +08:00
亲,您访问 NULL 上的字段是想做什么?让女朋友怀孕?让小行星撞地球?还是冰川融化吞没大陆

报错 Segment fault 只是所有这些结果里面最温柔的一个

未定义行为了解下。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/580613

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX