#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
????????
1
ashong 2019-07-06 17:55:39 +08:00 via iPhone
对象不 new 当然 sf 了
|
2
owt5008137 2019-07-06 17:58:43 +08:00 via Android
a 都没赋值过就直接用了,当然警告了
|
3
wevsty 2019-07-06 17:59:39 +08:00
a 只是个指针,没初始化不知道指向的是什么玩意,就这样赋值当然会 Segmentation fault
|
4
owt5008137 2019-07-06 18:00:33 +08:00 via Android
赋值 NULL 话就变成 a-v=1 ;尝试对 0x00-0x04 进行写入,当然 segment fault 了
|
5
littlewing 2019-07-06 18:00:51 +08:00 via iPhone
先买本 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
|
6
glacer 2019-07-06 18:02:27 +08:00
t a = malloc(sizeof(struct test));
|
7
bumz 2019-07-06 18:31:15 +08:00 via iPhone
亲,您访问 NULL 上的字段是想做什么?让女朋友怀孕?让小行星撞地球?还是冰川融化吞没大陆
报错 Segment fault 只是所有这些结果里面最温柔的一个 未定义行为了解下。 |