C调试与运行结果不一致

写了一个for循环倒序的数组,本来想着试着用不同排序测试其时间,但是发现倒序数组写出来调试结果与运行结果不一致

#include 
#define RANDNUM 30
int main()
{
    int j,k=0;
    int perversion[RANDNUM];
    for(j=RANDNUM;j>0;j--)
    {
        //产生30个倒序的数
        perversion[k]=j;
        printf("%d\n",perversion[k]);
        k++;
    }
    return 0;
}

以下为运行结果

img


再以下为调试结果

img


是因为没有将静态数组全部赋值完毕嘛?


#include <stdio.h>
#define RANDNUM 30
int main()
{
    int j,k=0;
    int perversion[RANDNUM];
    for(j=0;j<RANDNUM;j++)
    {
        //产生30个倒序的数
        perversion[k]=RANDNUM-j;
        printf("%d\n",perversion[k]);
        k++;
    }
    return 0;
}

代码越界的问题我改了一下 但是运行出来的结果任然不尽人意

img


可以看到只是从26开始倒序 而却26-24重复了一次
我个人设置了临界点 发现26是临界点
我感觉有没有可能是mingw编译器的问题 我用Visual Studio 2022可以完美运行此代码

问题已经解决
反馈:devc++是一个集成开发软件,里面内置了编译器
因此外界的mingw编译器并不会引起devc++编译结果
至于调试步骤与编译运行结果不一致是由于dev++软件本身出现了问题
解决方法:
1、卸载devc++并删除已配置的文件
2、在csdn中查找dev++下载方式【一般会给两种、第一种:官网下载{浏览器中下载速度非常慢 可能挂外网会快些或者插件?}第二种:大佬给的网盘。按照操作流程进行下载,其中第二步建议选择最低下的小方块 删除以前配置的文件{双重保证更安心} 下载成功后完美运行】


#include <stdio.h>
#define RANDNUM 30
int main()
{
    int j,k=0;
    int perversion[RANDNUM];
    for(j=0;j<RANDNUM;j++)
    {
        //产生30个倒序的数
        perversion[k]=RANDNUM-j;
        printf("%d\n",perversion[k]);
        k++;
    }
    return 0;
}

img

for(j=RANDNUM;j>0;j--)
越界了,结果不可知

for(j=RANDNUM-1;j>=0;j--)

该回答引用GPTᴼᴾᴱᴺᴬᴵ
你的代码在调试时和运行时的结果不同,可能是因为调试器和程序在处理数组时的优化不同导致的。具体来说,调试器可能会分配额外的内存用于存储调试信息,从而改变了数组在内存中的布局,导致输出结果不同。

不过这并不是你的代码的问题,而是调试器和编译器的实现细节。你的代码中的静态数组已经完全赋值完毕,所以不需要担心这个问题。建议在实际运行时观察输出结果,而不是依赖于调试器的输出。

额,看着应该是数组越界,看这行代码:

for(j = RANDNUM; j > 0; j--)

这个应改为这个:

for(j = RANDNUM - 1;j >= 0; j--)

望采纳

运行和调试的结果应该是一样的,程序是没有问题的。
运行的结果右侧应该有一个滚动条,你向上滚动查看下结果,应该有部分结果打印在上面,没有显示出来。
这是运行界面和调试界面的大小不一致,导致你只看到部分结果。
希望以上分析对你有用。