kor*_*han 5 c c++ reentrancy memcpy
我在信号处理程序中调用了一些C++函数,我的程序由分段错误终止.当我用gdb检查时,memcpy()函数是我获得SIGSEGV的地方.我想知道memcpy()是否是一个可重入函数?
Joh*_*ley 11
除了嵌入度最高的平台之外,它都是可重入的.你提到SIGSEGV所以我认为它不是其中之一.在这种情况下,最有可能的是memcpy()不是罪魁祸首:这是调用者的错.如果你要求memcpy()复制坏指针(或坏长度)那么它就会出现故障.你可以轻松地做到这一点:
memcpy(NULL, NULL, 123456789);
Run Code Online (Sandbox Code Playgroud)
这将导致SIGSEGV,它会告诉你memcpy()导致它.当然,这不是memcpy的错 - 它只是做你告诉它的.你的信号处理程序用奇怪的东西来调用它.对调用者站点的回溯(在gdb或你拥有的任何工具中)应该显示你所称的内容.如果做不到这一点,只需将你传递给memcpy的参数打印出来.