我有一个带有头文件的动态库,如下所示:
#ifndef SRC_H
#define SRC_H
#include<time.h>
namespace test
{
void sleep( int numsec );
}
#endif
和源文件如下:
#include"src.h"
namespace test
{
void sleep(int numsec)
{
sleep(numsec);
}
}
我有一个只包含以下主文件的可执行文件
#include "linked/src.h"
int main()
{
test::sleep(3);
}
我明白了
启动程序:/ usr0 / home / gschoenh / Dropbox / Code / cpp / scratch / main / app [使用libthread_db启用线程调试]使用主机libthread_db库“/lib/x86_64-linux-gnu/libthread_db.so.1” . 程序接收信号SIGSEGV,分段故障 . 在test :: sleep(numsec = 3)src.cpp中的0x00007ffff7bd863c:8 8 sleep(numsec);
谢谢您的帮助 :)
PS:我花了很多时间试图自己解决这个问题 . 我已经解决了我自己的最后100个错误 . 所以请不要像“你^#* $(#($&%(#_ . )花费更多的时间来尝试自己做#$&@(#)@ . ”谢谢 .
2 回答
看起来像一个递归的无限循环 . 除非编译器执行尾递归消除,否则它可能会导致堆栈溢出 .
如果这是对POSIX
sleep
函数的调用,则在<unistd.h>
中声明 . 一旦添加#include <unistd.h>
,您应该能够像这样调用它:上面的代码导致无限递归 . 我修改了代码如:
对我来说很好,g编译器版本g(Ubuntu / Linaro 4.6.3-1ubuntu5)4.6.3
另据 Linux 手册页http://linux.die.net/man/3/sleep;睡眠原型是
您还可以修改代码以存储从睡眠(unistd.h)返回到虚拟对象以解决冲突以及检查返回值(例如,如果呼叫被信号中断) .