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