c语言纠结问题之一,调试正确,运行正确----二级指针的作用

  最近写程序遇到一个奇怪的问题,那就是,一个程序,调试是正确的,但是运行的时候就出不来正确的结果,又不知道出错在哪里?这个问题真是两个字“纠结”!

在vc中,调试用的是LIBCD.LIB,运行用的是LIBC.LIB,两者调用的动态链接库不同。

调试的时候,只能调试逻辑错误,笔者遇到的问题是在使用realloc函数的时候,大家都知道realloc 函数,但是用的人却不是很多,它是在原来的基础上重新开辟空间,但是新开辟的空间的首指针,指向的就不一定是原来的空间,

   如:s = (char *) malloc(10 * sizeof(char));   //假设开辟后的地址为0000----0010

          s = (char *)realloc(s,40 * sizeof(char)); //则此时的s 地址可能是0000-0040

                                                                         //也可能是0020----0060

         所以在对s进行操作的时候,就是在新的空间进行操作,和旧的空间就没有关系,此时如果这段代码在函数中出现,对s进行操作,则是对新地址进行操作,旧地址还保持着原来的字符,当跳出函数时候,操作对旧的没有任何改变,就会出现问题,但是调试的时候,确实一定会重新开辟成0000---0040这段地址

        所以慎重指针,和动态开辟,还有就是可以在运行的时候打印出他们各自的地址值,方能发现错误!而我解决这个问题就是用二级指针,当对指针进行改变时候,那么二级指针的值也就改变了,这样就可以解决上诉的问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值