Debug模式和Release模式得出的结果不一样,

morris 2002-05-12 11:56:09
这是一个把2维数组分别按行和列转变为一维数组的程序
当N等于100时,Vc的Release模式与Debug模式,BCB,Bc3.1,得出的结果都不一样,请问这是程序的问题还是编译器的问题(Win2k,vc6_sp4),谢谢。


#include "stdio.h"
#define N 5
void main()
{
int source[N][N]={0};
int a[1000]={0}, b[1000]={0};
int i,j,k,n=1;
for(i=0;i<N;i++)
{
for(j=0;j<i;j++)
{
source[i][j]=0;
printf("%8d",source[i][j]);
}
for(j=i;j<N;j++)
{
source[i][j]=n++;
printf("%8d",source[i][j]);
}
printf("\n\n\n");
}//初始化2维数组
n=0;
printf("\n");
for(i=0;i<N;i++)
{
for(j=i;j<N;j++)
a[n++]=source[i][j];
}
for(i=0;i<n;i++)
printf("%8d",a[i]);
printf("\n\n");//显示初始的一维数组
n=0;
for(i=0;i<N;i++)
{
for(j=0,k=0;j<=i;j++)
{
b[n]=a[i+k];
n++;
k+=(N-1-j);
}
}
for(i=0;i<n;i++)
printf("%8d",b[i]);
printf("\n\n");
}



...全文
268 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
morris 2002-05-14
  • 打赏
  • 举报
回复
谢谢,结贴了
morris 2002-05-12
  • 打赏
  • 举报
回复
请各位高手帮忙看看啊!!!
zdhe 2002-05-12
  • 打赏
  • 举报
回复
是这个原因. BUG多了些吧.
[估计在Debug模式下,编译器自动增长数组(个人见解)]不对.

2K下4K单位管理内寸.在RELEASE下,系统没有为你申请那么多内寸. 在DEBUG下, 你的A,B事实上占用了符号表的空间所以没有出错, 如果N再大,DEBUG下也会出错的.
morris 2002-05-12
  • 打赏
  • 举报
回复
有劳大家了,
当N等于5时,结果是一样的
错就错在当N等于100时,source[N][N]有100^2=10000个元素
而a[],b[]容量只有1000,发生溢出错误,
改成a[10000],b[10000]就ok了。
(思考了n个小时,最后一个闪念:))

估计在Debug模式下,编译器自动增长数组(个人见解)

蒋晟 2002-05-12
  • 打赏
  • 举报
回复
release和debug默认对变量的初始化不一样的
int source[N][N]={0};
除了第一个元素之外,其他的都没有初始化。
比较好的习惯是用memset清零。
Hover 2002-05-12
  • 打赏
  • 举报
回复
...
jxvinus 2002-05-12
  • 打赏
  • 举报
回复
up
onlynight 2002-05-12
  • 打赏
  • 举报
回复
我在vc debug,release下都运行过了
结果是一样的

楼主什么问题

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧