linux编程段错误求解决!!!
答案:3 悬赏:40 手机版
解决时间 2021-01-29 00:45
- 提问者网友:刺鸟
- 2021-01-28 05:36
linux编程段错误求解决!!!
最佳答案
- 五星知识达人网友:英雄的欲望
- 2021-01-28 06:38
注意以下细节:
signal.h:typedef void (*__sighandler_t) (int);
__sighandler_t sa_handler; //sa_handler是个函数指针
int ImportData( ); //注意它的返回值是int 不是__sighandler_t追问不是很明白,可以具体点或者直接给我点建议吗追答void sa_handle_imp( int sig )
{
ImportData("test4.db","test","zh1.txt",",","errmsg");
}
void init_sigaction(void)
{
struct sigaction tact;
tact.sa_handler = sa_handle_imp ; //这里应该赋值一个函数名
tact.sa_flags = 0;
sigemptyset(&tact.sa_mask);
sigaction(SIGALRM, &tact, NULL);
}
这样试试吧追问这样以前也试过,我设定时间多久 它运行多久就出现了段错误
我觉得有可能是两个原因:1,用了while(1);2,访问只读的内存地址;
主函数这样的
int main()
242 {
243 void create_db();
244 create_db();
245 init_sigaction();
246 init_time();
247 while(1);
248 exit(0);
249 }
我去掉while(1) 可以运行不会段错误,但是不能实现功能追答设定时间多久 它运行多久就出现了段错误(说明你的定时机制起了作用)
这时,你的程序运行到了
ImportData("test4.db","test","zh1.txt",",","errmsg");
是这个函数出了问题!仔细检查一下ImportData()函数的问题吧
如果没有while(1);你的程序就直接退出了,你的定时机制不起作用了!
signal.h:typedef void (*__sighandler_t) (int);
__sighandler_t sa_handler; //sa_handler是个函数指针
int ImportData( ); //注意它的返回值是int 不是__sighandler_t追问不是很明白,可以具体点或者直接给我点建议吗追答void sa_handle_imp( int sig )
{
ImportData("test4.db","test","zh1.txt",",","errmsg");
}
void init_sigaction(void)
{
struct sigaction tact;
tact.sa_handler = sa_handle_imp ; //这里应该赋值一个函数名
tact.sa_flags = 0;
sigemptyset(&tact.sa_mask);
sigaction(SIGALRM, &tact, NULL);
}
这样试试吧追问这样以前也试过,我设定时间多久 它运行多久就出现了段错误
我觉得有可能是两个原因:1,用了while(1);2,访问只读的内存地址;
主函数这样的
int main()
242 {
243 void create_db();
244 create_db();
245 init_sigaction();
246 init_time();
247 while(1);
248 exit(0);
249 }
我去掉while(1) 可以运行不会段错误,但是不能实现功能追答设定时间多久 它运行多久就出现了段错误(说明你的定时机制起了作用)
这时,你的程序运行到了
ImportData("test4.db","test","zh1.txt",",","errmsg");
是这个函数出了问题!仔细检查一下ImportData()函数的问题吧
如果没有while(1);你的程序就直接退出了,你的定时机制不起作用了!
全部回答
- 1楼网友:刀戟声无边
- 2021-01-28 09:40
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg"); 你这样赋给tact.sa_handler的值是函数返回值不是函数指针
定义函数的地方:
int ImportData(char *dbfile, char *zTable, char *zFile, char *separator, char *errmsg)
改成
int (*ImportData)(char *dbfile, char *zTable, char *zFile, char *separator, char *errmsg)追问如果这样会出现错误啊
81: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
81 是定义该函数的下一行
81 {追答80行和81行贴上来看看追问按照你的:
80 int (*ImportData)(char *dbfile, char *zTable, char *zFile, char *separator, char *errmsg)
81 {
}追答哦 我错了 上面那个回答应该是问题所在。追问恩恩 谢谢你
定义函数的地方:
int ImportData(char *dbfile, char *zTable, char *zFile, char *separator, char *errmsg)
改成
int (*ImportData)(char *dbfile, char *zTable, char *zFile, char *separator, char *errmsg)追问如果这样会出现错误啊
81: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
81 是定义该函数的下一行
81 {追答80行和81行贴上来看看追问按照你的:
80 int (*ImportData)(char *dbfile, char *zTable, char *zFile, char *separator, char *errmsg)
81 {
}追答哦 我错了 上面那个回答应该是问题所在。追问恩恩 谢谢你
- 2楼网友:狂恋
- 2021-01-28 08:11
字符串放在char数组里,调用函数参数用相对应的数组名追问调用的是数据库,表,文档什么的啊追答你试试再说追问我试过这个啊 你的意思是先定义char a[]="test4.db";这些吗
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯