怪事!为什么Debug和Release运行结果不一样呢?

时间:2023-02-09 23:05:20
都能正常运行,可是运算出的结果不一样,主要是一些矩阵运算。请高手传授经验!
一般是由于什么原因造成的呢?
还有一个问题,为什么到析构函数的时候就出错呢?:
The instruction at "0x77f0511e" referenced memory at "0xfffffff5". The memory could be "written".
弄的我只有new而没法delete

9 个解决方案

#1


可能是数组使用有问题,比如定义a[2],而在程序中使用了a[2]这就会出问题,c中数组从0开始编号,2是数组的大小。

#2


你访问数组超界了

#3


你析构的时候怎么delete的?

ar = new int[2];
delete []ar;

#4


你用new定义了一个指针或者指针数组,但是使用过程中你又给该指针赋了其它的指针值,这样使用和用delete是都会出现问题。用查找命令检查一下指针名称,看一看赋值情况。

#5


你的数组一定过界了,即使用的内存超过了所分配的内存,debug有一定的容错能力,所以程序还能正确运行

#6


If the result is not identical. Pay attention to the speed of your program running. For instance:
  you called a random number in your program for several times, and the random number will be the same one number if you run it too fast.

#7


1、仔细检查你用到的变量,包括局部变量,看看他们的初始值是否正确初始化
2、看看编译的优化选项,调节一下

#8


我在编程时也遇到这种情况。这是由于VC++ debug时和release时调用的dll不一样。如果release时调用的是xxx.dll,则debug时调用的是xxxd.dll。实际上这两个dll的运行过程及结果并不完全一样

#9


先检查一下是不是指针有什么指的不对的地方,有没有进行初始化,如果用到了赋值语句,一定要注意内存拷贝时要拷贝的字节数一致,不然,会有操作失败,你也可以使用BoundChecker来检查一下,这个工具很好用了,特别对这种内存操作更有效

#1


可能是数组使用有问题,比如定义a[2],而在程序中使用了a[2]这就会出问题,c中数组从0开始编号,2是数组的大小。

#2


你访问数组超界了

#3


你析构的时候怎么delete的?

ar = new int[2];
delete []ar;

#4


你用new定义了一个指针或者指针数组,但是使用过程中你又给该指针赋了其它的指针值,这样使用和用delete是都会出现问题。用查找命令检查一下指针名称,看一看赋值情况。

#5


你的数组一定过界了,即使用的内存超过了所分配的内存,debug有一定的容错能力,所以程序还能正确运行

#6


If the result is not identical. Pay attention to the speed of your program running. For instance:
  you called a random number in your program for several times, and the random number will be the same one number if you run it too fast.

#7


1、仔细检查你用到的变量,包括局部变量,看看他们的初始值是否正确初始化
2、看看编译的优化选项,调节一下

#8


我在编程时也遇到这种情况。这是由于VC++ debug时和release时调用的dll不一样。如果release时调用的是xxx.dll,则debug时调用的是xxxd.dll。实际上这两个dll的运行过程及结果并不完全一样

#9


先检查一下是不是指针有什么指的不对的地方,有没有进行初始化,如果用到了赋值语句,一定要注意内存拷贝时要拷贝的字节数一致,不然,会有操作失败,你也可以使用BoundChecker来检查一下,这个工具很好用了,特别对这种内存操作更有效