c - 为什么我同样的 C 代码在编译时会产生不一致的结果

标签 c

我写了一些排序算法。为了简单起见,我选择了一个具有唯一值的小数组。每当我有时编译代码时,我都会得到正确的答案,但有时我会得到不同的错误答案。我想知道是什么导致了这个问题。请注意,我使用的是相同的代码。

我正在使用 GCC 4.2.1

我试过一个在线编译器,它给出了正确的答案。

#include <stdio.h>

int main(){
  int i,j,k,l;
  int A[10]={2,10,6,24,1,-5,23,0,12,-100};

  for(i=0;i<10;i++){
    if(A[i+1]<A[i]){
      l=A[i+1];
      for(j=0;j<=i;j++){
        if((A[j]<A[i+1])&&(A[j+1]>A[i+1])){
          for(k=i;k>=j;k--){
            A[k+1]=A[k];
          }
          A[j+1]=l;
        }
        else if(A[0]>A[i+1]){
          for(k=i;k>=0;k--){
            A[k+1]=A[k];
          }
          A[0]=l;
        }
      }
    }
  }

  for(i=0;i<10;i++){
    printf("%d\n",A[i]);
  }
}

有时它给出: { -100, -5, 0, 1、 2、 6、 10, 12, 23、 24, } 有时它给出: -791216026, -100, -5, 0, 1、 2、 6、 10, 12, 23、 中止陷阱:6

最佳答案

您的程序读取数组。

i等于 9 , A[j+1]i == j 时读取数组这是你的 for(j=0;j<=i;j++) 允许的循环停止条件。

这也适用于 A[k+1]

关于c - 为什么我同样的 C 代码在编译时会产生不一致的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55326011/

相关文章:

c++ - C/C++ 中的头文件,标准?

c++ - 无法正确传递 char 数组

c - 系统调用: Interpreting ktrace output

c - 如何在 OpenCV 中扭曲图像?

c - 什么时候将值隐式转换为指针?

c - 在 Code Blocks IDE 中收到错误消息 "expected identifier or ' )' before ' }' token"

c - Windows触发了一个断点——C语言

c - 为什么快速排序函数会更改参数的值

c - 使用虚拟地址读取Proc/[pid]/mem

c - C语言从内存上传FTP文件