C++ valgrind和常规c++;跑

C++ valgrind和常规c++;跑,c++,debugging,valgrind,C++,Debugging,Valgrind,我在试着找出一个我能找到seg的地方。尝试从向量向指针赋值时出错(链接中更好地描述了这一点)。当我使用valgrind运行代码时,我没有得到seg.fault valgrind有什么不同之处。我认为我需要考虑ValgRession会话和常规C++会话之间的内存管理差异,但我不知道 < P>也许这个问题可能是时间相关的,当您使用valgrind运行代码时,它会运行得稍慢一些,因为valgrind会在运行时收集和诊断代码。问题可能与时间有关,当您使用valgrind运行代码时,它会运行得稍慢一些,因

我在试着找出一个我能找到seg的地方。尝试从向量向指针赋值时出错(链接中更好地描述了这一点)。当我使用valgrind运行代码时,我没有得到seg.fault


valgrind有什么不同之处。我认为我需要考虑ValgRession会话和常规C++会话之间的内存管理差异,但我不知道

< P>也许这个问题可能是时间相关的,当您使用valgrind运行代码时,它会运行得稍慢一些,因为valgrind会在运行时收集和诊断代码。

问题可能与时间有关,当您使用valgrind运行代码时,它会运行得稍慢一些,因为valgrind会在运行时收集和诊断代码。

valgrind会跟踪您的程序内存使用情况。这就是它告诉你泄漏的方式。这意味着它劫持了
malloc
等等,并使用自己的代码来实现这一点。这意味着,当您正常运行代码时,您可能会读/写一些意外释放的数据,从而导致segfault,而valgrind可能会保留此内存,以查看它是否确实丢失等,因此(不)幸运地意味着内存仍然有效。只是一个猜测。

Valgrind跟踪您的程序内存使用情况。这就是它告诉你泄漏的方式。这意味着它劫持了
malloc
等等,并使用自己的代码来实现这一点。这意味着,当您正常运行代码时,您可能会读/写一些意外释放的数据,从而导致segfault,而valgrind可能会保留此内存,以查看它是否确实丢失等,因此(不)幸运地意味着内存仍然有效。只是一个猜测。

来自:

4.4。我的程序正常崩溃,但在Valgrind或vice下不会崩溃 反之亦然。发生了什么事

当一个程序在Valgrind下运行时,它的环境稍微 与本机运行时不同。例如,内存布局是 不同,线程的调度方式也不同

大多数时候,这没有什么区别,但它可以, 特别是当你的程序有缺陷的时候。例如,如果您的程序 崩溃,因为它错误地访问了无法寻址的内存, 运行时,此内存可能不会无法寻址 在瓦尔格林的领导下。或者,如果您的程序有数据竞争,则 可能不会在Valgrind下出现

你无法改变这一切,这只是自然 Valgrind的工作方式是,它不能完全复制本机 执行环境。如果您的程序因故障而崩溃 以本机方式运行时出现内存错误,但在Valgrind下运行时没有,在 大多数情况下,Memcheck应该识别坏内存操作

所以你不能和它有任何关系。实际上,您不必担心您的程序不会在Valgrind下崩溃。您应该从中读取错误消息并修复它们。首先。它们几乎总是指示代码中的错误。在这种特殊情况下,您还可以从简单bash脚本在无限循环中运行代码,直到它生成错误消息。最有可能的是使用无效的迭代器,在C++中是<强>未定义的行为>:

< P>:

4.4。我的程序正常崩溃,但在Valgrind或vice下不会崩溃 反之亦然。发生了什么事

当一个程序在Valgrind下运行时,它的环境稍微 与本机运行时不同。例如,内存布局是 不同,线程的调度方式也不同

大多数时候,这没有什么区别,但它可以, 特别是当你的程序有缺陷的时候。例如,如果您的程序 崩溃,因为它错误地访问了无法寻址的内存, 运行时,此内存可能不会无法寻址 在瓦尔格林的领导下。或者,如果您的程序有数据竞争,则 可能不会在Valgrind下出现

你无法改变这一切,这只是自然 Valgrind的工作方式是,它不能完全复制本机 执行环境。如果您的程序因故障而崩溃 以本机方式运行时出现内存错误,但在Valgrind下运行时没有,在 大多数情况下,Memcheck应该识别坏内存操作


所以你不能和它有任何关系。实际上,您不必担心您的程序不会在Valgrind下崩溃。您应该从中读取错误消息并修复它们。首先。它们几乎总是指示代码中的错误。在这种特殊情况下,您还可以从简单bash脚本在无限循环中运行代码,直到它生成错误消息。很可能你在使用无效的迭代器,在C++中是<强>未定义的行为> Valgrind在虚拟CPU上运行程序,也就是说,它执行软件中的每个汇编指令(除了内核调用)。多线程程序被序列化,即一次只有一个执行线程在进行


如果您的应用程序是多线程的,当它在valgrind竞争条件下执行时,线程序列化可能会掩盖同步的缺失,因此不会观察到此类错误的影响。

valgrind在虚拟CPU上运行您的程序,也就是说,它执行软件中的所有汇编指令(除了内核调用)多线程程序被序列化,即一次只有一个线程在执行


如果您的应用程序是多线程的,当它在valgrind race条件下执行时,线程序列化可能会掩盖同步的缺失,因此不会观察到此类错误的影响。

如果我通过了一些法律,您无法链接到自己的开放性问题,请让我知道,我将删除该问题。这里有链接到其他q没有问题