user-0 提问: 为什么devc++调试的结果和运行的结果不一致

回复:
user: user-1
content: 楼主解决了吗

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <assert.h> void sort(int *a, int left, int right); void merge(int *a, int left, int center, int right);  int main() {     int n, i;      scanf("%d", &n);     int *number;      number = (int *)malloc(sizeof(int) * n);     if (!number)         return -1;      for(i=0;i<n;i++)         scanf("%d", &number[i]);     sort(number, 0, n-1);     //printf("%d", number[0]);     //for(i=1;i<n;i++)     for(i=0;i<n;i++)         printf(" %d", number[i]);      free(number);     return 0; }  void sort(int *a, int left, int right) {     if(left>=right)return;     int center;     center=(left+right)/2;     sort(a, left, center);     sort(a, center+1, right);     merge(a, left, center, right); } void merge(int *a, int left, int center, int right) {     int i, j, k, n;     k=0;     i=left;     j=center+1;     n=right-left+1;     //int re[n];     int *re;      re = (int *)malloc(sizeof(int) * n);     if (!re)         exit(0);      while(1){         if(a[i]<a[j]){             assert(k<n);             re[k++]=a[i++];             if(i>=center+1)break;         }else {             assert(k<n);             re[k++]=a[j++];             if(j>=right+1)break;         }     }     if(i>=center+1){         for(;j<right+1 ;j++) {             assert(k<n);             re[k++]=a[j];         }     }else{         for(;i<center+1;i++) {             assert(k<n);             re[k++]=a[i];         }     }     for(i=0,j=left;i<n;){         assert(i<n);         a[j++]=re[i++];     }      free(re); }

user: user-0
content: 感谢回复，我用您的代码测试了下，会出现同样的问题。也就是说，如果我直接运行程序的话没有问题，但如果我在您发的程序的第42行设置了一个断点， 再点击下一步的时候， 这个k的值并不是0， k有时会等于1， 有时等于2， 也有时会正常等于0。当k并没有等于0的时候， 后续的k++也并不会让k每次加一， k会无规律往上增长， 甚至有时我并没有点击下一步（我只是盯着屏幕看， 没有进行任何操作）， k值也会往上增长。。。这种情况就会输出错误的结果， 或者程序崩溃。。您可以再42行设置断点试一下， 不会只有我出现这种情况吧。 重点说明，程序可以正常运行， 只有当某处设置了断点后就会出现奇怪的状况。

user: user-3
content: #include <stdio.h> #include <stdlib.h>  void sort(int *a, int left, int right); void merge(int *a, int left, int center, int right);  int main() {     int n, i;      scanf("%d", &n);     int *number;      number = (int *)malloc(sizeof(int) * n);     if (!number)         return -1;      for(i=0;i<n;i++)         scanf("%d", &number[i]);     sort(number, 0, n-1);     //printf("%d", number[0]);     //for(i=1;i<n;i++)     for(i=0;i<n;i++)         printf(" %d", number[i]);      free(number);     return 0; }  void sort(int *a, int left, int right) {     if(left==right)return;     int center;     center=(left+right)/2;     sort(a, left, center);     sort(a, center+1, right);     merge(a, left, center, right); } void merge(int *a, int left, int center, int right) {     int i, j, k;     k=0; i=left; j=center+1;     int n=right-left+1;     //int re[n];     int *re;      re = (int *)malloc(sizeof(int) * n);     if (!re)         exit(0);      while(1){         if(a[i]<a[j]){             re[k++]=a[i++];             if(i==center+1)break;         }else {             re[k++]=a[j++];             if(j==right+1)break;         }     }     if(i==center+1){         for(;j<right+1;j++)re[k++]=a[j];     }else{         for(;i<center+1;i++)re[k++]=a[i];     }     for(i=0,j=left;i<n;){         a[j++]=re[i++];     }      free(re); } 供参考～   测试了暂未发现问题～楼主可以多测测试试～