`
tibaloga
  • 浏览: 869867 次
文章分类
社区版块
存档分类
最新评论

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这段地址

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics