gpt4 book ai didi

c - 我是否在 Cygwin GCC (v 4.5.3) 中发现了错误?

转载 作者:行者123 更新时间:2023-12-02 21:47:39 26 4
gpt4 key购买 nike

在以下代码块中,在第一次循环迭代后,num_insts 被重新分配给 0

inst_t buf[5] = {0};
num_insts = 10;
int i = 5;
for( ; i > 0; i-- )
{
buf[i] = buf[i-1];
}
buf[0] = next;

我想不出这种行为的任何可能的有效原因,但我也 sleep 不足,所以如果有第二意见,我们将不胜感激。

为 buf 移位执行的程序集是这样的:

004017ed:   mov 0x90(%esp),%eax
004017f4: lea -0x1(%eax),%ecx
004017f7: mov 0x90(%esp),%edx
004017fe: mov %edx,%eax
00401800: shl $0x2,%eax
00401803: add %edx,%eax
00401805: shl $0x2,%eax
00401808: lea 0xa0(%esp),%edi
0040180f: lea (%edi,%eax,1),%eax
00401812: lea -0x7c(%eax),%edx
00401815: mov %ecx,%eax
00401817: shl $0x2,%eax
0040181a: add %ecx,%eax
0040181c: shl $0x2,%eax
0040181f: lea 0xa0(%esp),%ecx

执行上面第一条汇编指令之前的寄存器内容是这样的:

eax 0
ecx 0
edx 0
ebx 2665332
esp 0x28ab50
ebp 0x28ac08
esi 0
edi 2665432
eip 0x4017ed <main+1593>

按照这些说明,此:

eax 0
ecx 0
edx 2665432
ebx 2665332
esp 0x28ab50
ebp 0x28ac08
esi 0
edi 2665456
eip 0x401848 <main+1684>

我不知道足够多的汇编来理解这些,但也许回答这个问题的人会从中受益。

最佳答案

对于 i = 5 的第一次迭代,您编码:

for( ; i > 0; i-- ) // i = 5 > 0 = true
{
buf[i] = buf[i-1]; // b[5] = b [5 - 1]
}

buf[5] = buf[4];因为buf的大小只是5,最大索引值可以是4 所以代码中的错误 = 数组超出索引问题 => rhs buf[5]

关于c - 我是否在 Cygwin GCC (v 4.5.3) 中发现了错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19247376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com