段错误解决办法

血的教训

昨天调试遇到两个段错误

0x00007ffff7ade419 in memcpy () from /lib/libc.so.6

0x00007ffff7acd3c9 in _IO_default_xsputn () from /lib/libc.so.6


过去一直对指针初始化没什么概念,经过昨天血淋淋的教训(调试时候,产生各种奇怪的预想不到的错误),终于知道,如果要对字符指针多次赋值,是不能用字符串初始化的。如
char *buf = "\n";
这样初始化过的buf是只读的,要是再次赋值,会报段错误。
我以为不初始化就没问题了,太天真了,
char *buf;
结果虽然不报错,却会覆盖其它数据,例如我定义了一个
int child = 2;
在我给buf赋值后,child竟然变成了23132。一开始没有什么段错误和数据溢出的概念。现在总算长见识了。 


正确定义应该是

char buf[20] = "hello"

数组定义了size后,是可以初始化为可改写数据的,但是指针直接被字符串初始化就被看做是只读的了。

或者
char *buf = (char*)malloc(20); 
sprintf(buf,"hello");
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值