遇到的地址越界问题

以前上课时经常听老师说到数组地址越界的危险性,自己很少遇到这方面的问题,也没太在意。今天调程序遇到了一个问题,检查了n遍还是想不明白问题在哪儿,情况如下,

创建了3个数组:

 char query[QUERY_BUF_LENGTH];
 char query1[SUBQUERY_BUF_LENGTH];
  char query2[SUBQUERY_BUF_LENGTH];
 然后初始化数组query1,query2,并将这两个字符串连接组合赋给query:

memset(query1,'/0', SUBQUERY_BUF_LENGTH);
  sprintf(query1,"SELECT reg_raster_metadata(%I64u,'%s',%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d); ", .....)

memset(query2,'/0', SUBQUERY_BUF_LENGTH);
  sprintf(query2,"SELECT reg_raster_metadata(%I64u,'%s',%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d); ", .....)

memset(query,'/0', QUERY_BUF_LENGTH);
  sprintf(query,"%s %s", query1, query2);

但结果是query的值不对,而且每次执行完query2的初始化后,query1的值都变了。但显然query1和query2是独立的,不可能会发生这种串联现象。

后来跟踪query2,发现它地址越界了,赋值的字符串比其数组长度要长。估计是写到了query1了,这样query的值自然会发生莫名奇妙的改变。

地址越界确实后果很严重,而且这类错误感觉也不太好找,应该是在写程序的时候就要注意到可能出现这个问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值