C++ 若程序在调试时内存损坏,但在relase中运行正常,那个么可以吗

C++ 若程序在调试时内存损坏,但在relase中运行正常,那个么可以吗,c++,debugging,memory-leaks,heap-memory,corruption,C++,Debugging,Memory Leaks,Heap Memory,Corruption,我有一个程序,在调试时会导致内存损坏,但在发行版中运行良好。更奇怪的是,程序在“崩溃”之前完成了它的功能(它将数据保存到文件中)。这是不是意味着VisualStudio不喜欢我的程序,还是意味着我有一个严重的bug需要修复?一般来说,如果调试模式崩溃,是否总是意味着程序有问题,或者可能只是程序在调试模式下运行的方式有问题,所以我不必太担心?这意味着您有严重的错误需要修复。最可能的原因是您正在使用未初始化的变量。在VS中,这是导致程序在调试和发布时运行不同的最常见原因。这意味着您有严重的错误需要修

我有一个程序,在调试时会导致内存损坏,但在发行版中运行良好。更奇怪的是,程序在“崩溃”之前完成了它的功能(它将数据保存到文件中)。这是不是意味着VisualStudio不喜欢我的程序,还是意味着我有一个严重的bug需要修复?一般来说,如果调试模式崩溃,是否总是意味着程序有问题,或者可能只是程序在调试模式下运行的方式有问题,所以我不必太担心?

这意味着您有严重的错误需要修复。最可能的原因是您正在使用未初始化的变量。在VS中,这是导致程序在调试和发布时运行不同的最常见原因。

这意味着您有严重的错误需要修复。最可能的原因是您正在使用未初始化的变量。在VS中,这是导致程序在调试和发布时运行不同的最常见原因。

这几乎肯定是应用程序中的一个错误,需要跟踪和修复

有许多类型的bug会导致错误。某些类型的未定义行为(如内存损坏)可能表现为看似随机的故障,这些故障在程序中发生的时间比导致它们的错误要晚得多

在调试模式下,VisualStudio竭尽全力确保此类故障尽早发生并尽可能突出。在发布模式中,重点是性能


中对调试和发布之间的一些差异进行了很好的总结。几乎可以肯定,这是应用程序中的一个bug,需要跟踪和修复

有许多类型的bug会导致错误。某些类型的未定义行为(如内存损坏)可能表现为看似随机的故障,这些故障在程序中发生的时间比导致它们的错误要晚得多

在调试模式下,VisualStudio竭尽全力确保此类故障尽早发生并尽可能突出。在发布模式中,重点是性能


中对调试和发布之间的一些差异进行了很好的总结。不,它不正常。这很可能意味着某个变量或指针未初始化。在调试模式下,此类非斜体值通常默认为0,而shuch默认值不用于发布(优化)代码。

不,它不正常。这很可能意味着某个变量或指针未初始化。在调试模式下,此类非斜体值通常默认为0,而shuch默认值不用于发布(优化)代码。

最有可能的情况是您有一个严重的错误需要修复。这可能是一个错误,但在某些情况下,混合使用exe和dll的调试和发布版本可能会导致调试器错误地认为您有内存问题。您应该验证这一点以确保。不确定,这是个错误的假设,不好。“运行良好”不是对“将始终运行良好”的有效测试。“这是否意味着Visual Studio根本不喜欢我的程序”-我不知道Visual Studio维护某些程序的首选项。最可能的情况是,您有一个严重的错误需要修复。这可能是一个错误,但在某些情况下,混合使用exe和dll的调试和发布版本可能会导致调试器错误地认为您有内存问题。您应该验证这一点以确保。不确定,这是个错误的假设,不好。“运行良好”不是对“将始终运行良好”的有效测试。“这是否意味着Visual Studio不喜欢我的程序”-我不知道Visual Studio维护某些程序的首选项。“这很可能意味着某些变量或指针未初始化”-不一定。可以是任何类型的未定义行为,如堆损坏、无效指针(未初始化)、竞争条件(在MutlithReading的情况下)等@Kiril这确实意味着这些事情是可能的,但根据我的经验,未初始化的变量和popinters构成了这类错误的大部分。当然,我投了赞成票,只要提到这一点,您就可以将其添加到您的答案中。“这很可能意味着某个变量或指针未被初始化”-不一定。可以是任何类型的未定义行为,如堆损坏、无效指针(未初始化)、竞争条件(在MutlithReading的情况下)等@Kiril这确实意味着这些事情是可能的,但根据我的经验,未初始化的变量和popinters构成了这类错误的大部分。当然,我投了赞成票,只要一提,你就可以把它加入你的答案中。