首页 学无止境C语言笔记正文

C语言中一个神奇的代码【bug】

一本书上说,下面的代码可能会产生无限循环【死循环】,你能看出Bug在哪吗?

代码看似没问题,实际问题很深奥,涉及到内存分配的问题【但是我们实际不会这样写,毕竟是错的】


先看下代码

104253bqlcknq47cw001w6.jpg

看代码显示应该是到11的时候就停了,反正数组是越界了,删除数组运行发现是因为数组的问题,但是不知道为啥又循环

经过多方查找资料和论坛讨论终于有了答案:

数组访问是0-9
定义是10
分配内存的时候a[10]后面紧跟,i 
访问a[10]的时候越界,因为i在a[10]后面,初始化时候数组和变量在内存中相邻,数组总共10个元素,下标从0到9,下标为10访问指向的地址是循环控制变量i的,越界就越到了i的内存块,赋值的时候把0赋给了a[10] 但a[10]是越界的就间接赋给了i
i小于等于10

不知道能不能看明白这里附上一张图

QQ图片20191106102503.jpg

凑合着看吧


此种情况只在Dev中才会出现无限循环,VC中运行正常

经过查找资料得知:

不同的c编译器对内存分配的方法不同,所以有的会出现a[10]和i的地址相同,有的不会


这个神奇的代码就这么解决掉了


网友也给出了另一种验证方法:

QQ截图20191106111333.png

QQ截图20191106111027.png


有想法可以下方评论


本文标题:C语言中一个神奇的代码【bug】
本文链接:https://dingqidong.com/?id=83
作者授权:除特别说明外,本文由 By无邪 原创编译并授权 无邪-blog 刊载发布。
版权声明:本文使用「署名-非商业性使用-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议。

评论