当前位置: 技术问答>linux和unix
Linux下调用.so引发的段错误问题
来源: 互联网 发布时间:2015-05-11
本文导语: Linux下调用.so引发的段错误问题 main(argc,argv) { void * HwDetectLib; void (*Init)(); char *charSourceHwconf; HwDetectLib = dlopen("/home/hwdetect.so",RTLD_LAZY); Init = dlsym(HwDetectLib,"Init"); charSourceHwc...
Linux下调用.so引发的段错误问题
main(argc,argv)
{
void * HwDetectLib;
void (*Init)();
char *charSourceHwconf;
HwDetectLib = dlopen("/home/hwdetect.so",RTLD_LAZY);
Init = dlsym(HwDetectLib,"Init");
charSourceHwconf = "/home/a";
(*Init)(charSourceHwconf); //该函数能够正确执行,但后面一句“end”始终无法输出,同时系统提示“段错误”……
printf("end");
}
请问这会是什么原因?
main(argc,argv)
{
void * HwDetectLib;
void (*Init)();
char *charSourceHwconf;
HwDetectLib = dlopen("/home/hwdetect.so",RTLD_LAZY);
Init = dlsym(HwDetectLib,"Init");
charSourceHwconf = "/home/a";
(*Init)(charSourceHwconf); //该函数能够正确执行,但后面一句“end”始终无法输出,同时系统提示“段错误”……
printf("end");
}
请问这会是什么原因?
|
一般来说段错误的发生一定是出现了访问越界,比如说,你在库函数中分配了32字节的内存,却
拷贝了一个大于这个数值的字符串进去,拷贝的时候不会出错,但是当你删除内存的时候就会出现段错误.
因此,有必要监查一下,你在init函数中都做了些什么?有没有分配内存等问题.一点一点排除啦.
拷贝了一个大于这个数值的字符串进去,拷贝的时候不会出错,但是当你删除内存的时候就会出现段错误.
因此,有必要监查一下,你在init函数中都做了些什么?有没有分配内存等问题.一点一点排除啦.