代码:块调试模式:我的代码崩溃,如果构建和运行,但如果调试/继续
Code::Blocks debug mode: my code crashes if build and run, but not if debug/continue
我的IDE是Code::Blocks。我在调试模式,我点击"红色播放按钮"调试/继续,我的代码运行良好。然后,总是在调试模式下,我点击运行的"绿色播放按钮",我的代码崩溃了。你知道为什么会这样吗?我怎么能找到我的代码中的错误,如果点击调试/继续一切运行良好?我不能包含我的代码的副本,因为它太长了。
经过反复调试后,我发现当我使用"delete[]"来释放由"new"分配的指针所指向的内存块时,程序崩溃了。奇怪的是,这个动态分配和释放是在for循环中,程序在几个循环后崩溃,所以不是在开始的时候。
谢谢你的建议。
EDIT: Allocation with "new[]"。代码太长,我无法粘贴。在我的代码中,对其他指针使用了相同的分配和解除分配,没有问题,但显然只有其中一些在解除分配时导致代码崩溃。我怎么能调试,如果当我点击"调试/继续"程序不崩溃,但它崩溃时,我点击"运行"?
调试和发布模式之间的一个主要区别是,通常在调试中,所有内存将初始化为零。通常,这使得在调试时比在发布时工作得更好。
然而,如果你正在访问一个已经初始化为0的指针,那么这将导致分段错误或类似的错误。在释放模式下,你可能只是很幸运,有这个指针看着内存是可访问的。
谢谢你的帮助。最后,我的程序试图访问一个越界的指针,所以我解决了它。奇怪的是,调试器没有显示任何错误/警告(例如分段错误)。
相关文章:
- C++代码以测试另一个.cpp如果可以编译它
- 如果 iostream 对象不可复制,为什么以下代码是合法的?
- 如果我在下面的代码片段中添加"delete[] d;",为什么我得到零?
- 如果代码包含多个复杂度循环,如何计算复杂度
- 为什么使用 std::vector 的代码不能编译,但使用 std::unique_ptr 如果没有 noexcept
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 如果代码中没有连接任何插槽,是否有理由发出Qt信号?
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 如果 constexpr 使用尽可能短的代码,我该如何向后移植?
- 如果用户尝试从 JS 调用对象的未定义函数C++则回调C++代码
- 如果我在下面的代码中使用 list 而不是 vector,为什么在我尝试在迭代器之间执行减法的行中编译失败?
- 我在此代码中要求一个数字,如果用户给出一个字母,我该怎么办?
- 代码是否有效.如果我想显示第一个元素?如果不是,那么 s.begin() 会返回什么?
- 如果要测试,我是否应该将C 代码写为静态或动态库
- C - 如果语句问题.代码将不会运行其他,否则
- 如果 LTO 中的代码依赖于其构造的副作用,是否允许 LTO 删除未使用的全局对象?
- 如果此代码无法在 C++17 中编译
- 如果C++编译为机器代码,为什么我们需要安装"运行时"?
- 如果语句在我的代码中不起作用
- QMutexLocker 是否返回错误代码(如果有)