Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用setjmp和longjmp时Valgrind失败_C++_C_Memory Management_Memory Leaks_Valgrind - Fatal编程技术网

C++ 使用setjmp和longjmp时Valgrind失败

C++ 使用setjmp和longjmp时Valgrind失败,c++,c,memory-management,memory-leaks,valgrind,C++,C,Memory Management,Memory Leaks,Valgrind,我被分配了一个任务,所以使用signals、setjmp和longjmp c函数模拟用户级线程库。 基本上,该程序包括为每个“线程”分配内存,并使用跳远和信号模拟非直接代码流和抢占 当我运行valgrind工具时,我会收到以下形式的消息: “”“ “”“ 我已经阅读了一些论坛和该工具的文档,据我所知,valgrind似乎不支持长跳转和“setjmp”(只要信号处理跳转),因此导致了内存问题,但我无法给出明确的答案 谢谢你的帮助。 谢谢 valgrind似乎不支持长跳转和“setjmp”(只要信号

我被分配了一个任务,所以使用signals、setjmp和longjmp c函数模拟用户级线程库。 基本上,该程序包括为每个“线程”分配内存,并使用跳远和信号模拟非直接代码流和抢占

当我运行valgrind工具时,我会收到以下形式的消息: “”“

“”“

我已经阅读了一些论坛和该工具的文档,据我所知,valgrind似乎不支持长跳转和“setjmp”(只要信号处理跳转),因此导致了内存问题,但我无法给出明确的答案

谢谢你的帮助。 谢谢

valgrind似乎不支持长跳转和“setjmp”(只要信号处理跳转)

更准确地说,Valgrind不直接支持通过{sig,}longjmp进行“自定义”堆栈切换

您可以放置特殊的Valgrind注释来通知Valgrind您正在执行的堆栈切换,但这可能不是一项容易的任务。看到这一点,特别是
VALGRIND\u STACK\u REGISTER
VALGRIND\u STACK\u delegister
VALGRIND\u STACK\u CHANGE
客户端请求。

这里发生了什么:
t1()(tal3.cpp:23)
?消息来源会有所帮助。这种行为,以及这种valgrind日志是否可以复制?
Invalid write of size 8
==19100== at 0x560020F: __sigsetjmp (setjmp.S:36)
==19100== by 0x403EC3: switchThreads(bool, bool, bool) (uthreads.cpp:673)
==19100== by 0x403DE6: signalHandler(int) (uthreads.cpp:652)
==19100== by 0x56004EF: ??? (in /lib/x86_64-linux-gnu/libc-2.13.so)
==19100== by 0x404D93: t1() (tal3.cpp:23)
==19100== Address 0x5959c90 is 48 bytes inside a block of size 4,312 alloc'd

==19100== at 0x4C2851B: operator new(unsigned long, std::nothrow_t const&) (vg_replace_malloc.c:316)

==19100== by 0x402E67: uthread_spawn(void (*)()) (uthreads.cpp:358)
==19100== by 0x404DD6: main (a3.cpp:41)