我的程序运行时,出现段错误,大家帮忙指点一下吧

zhxfzls 2012-09-03 08:23:17
前几天编的一个程序,开始还好好的,今天运行了一次也行,刚刚运行的时候就出现了段错误,应该是什么原因啊?在ubuntu上运行的

就一个警告:213: warning: assignment makes pointer from integer without a cast
代码:开始就定义函数int ImportData(char *dbfile, char *zTable, char *zFile, char *separator, char *errmsg)
然后定义了一个信号处理机制函数调用了它

void init_sigaction(void)
210 {
211 struct sigaction tact;
212 /*信号到了要执行的任务处理函数为int ImportData(char *dbfile, char *zTable, char *zFile, char ……*/
213 tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");
214 tact.sa_flags = 0;
215 /*初始化信号集*/
216 sigemptyset(&tact.sa_mask);
217 /*建立信号处理机制*/
218 sigaction(SIGALRM, &tact, NULL);
219 }
然后就出现了那样的警告。开始运行是可以的,今天运行就出错了。大家给我个建议吧
...全文
234 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxfzls 2012-09-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:

C/C++ code
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");
改为C/C++ code
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");
试试。

……

……
[/Quote]
怎样调用参数啊
挣扎中前行 2012-09-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

tact.sa_handler = ImportData;
这样还是段错误啊 并且没有将参数带进去,怎么运行呢 你是基于什么的考虑啊?
[/Quote]

这里要赋值函数指针的,你那样写是赋值函数返回值,函数名表示函数的地址。
zhxfzls 2012-09-04
  • 打赏
  • 举报
回复
tact.sa_handler = ImportData;
这样还是段错误啊 并且没有将参数带进去,怎么运行呢 你是基于什么的考虑啊?
BYD123 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

C/C++ code
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");
改为C/C++ code
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");
试试。

……
[/Quote]
写错了,不好意思。
tact.sa_handler = ImportData;
BYD123 2012-09-04
  • 打赏
  • 举报
回复
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");
改为
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");
试试。
zhxfzls 2012-09-04
  • 打赏
  • 举报
回复
用gdb调试时出现以下信息
Program received signal SIGSEGV, Segmentation fault.
0x0043b564 in _IO_default_xsputn () from /lib/tls/i686/cmov/libc.so.6
(gdb) where

#0 0x0043b564 in _IO_default_xsputn () from /lib/tls/i686/cmov/libc.so.6
#1 0x0041238c in vfprintf () from /lib/tls/i686/cmov/libc.so.6
#2 0x0043014c in vsprintf () from /lib/tls/i686/cmov/libc.so.6
#3 0x00418ffb in sprintf () from /lib/tls/i686/cmov/libc.so.6
#4 0x080491ed in ImportData (dbfile=0x80495ab "test5.db",
zTable=0x8049700 "test", zFile=0x80496f8 "zh1.txt",
separator=0x80496f6 ",", errmsg=0x80496ef "errmsg") at water.c:169
#5 0x0804940a in main () at water.c:214
(gdb) list
188 }
189 free(azCol);
190 fclose(in);
191 sqlite3_finalize(pStmt);
192 sqlite3_exec(db, zCommit, 0, 0, 0);
193 return 1;
194 }
195 int main( void )
196 {int ImportData(char *dbfile, char *zTable, char *zFile, char *separator, char *errmsg);
197 sqlite3 *db=NULL;
zhxfzls 2012-09-03
  • 打赏
  • 举报
回复
这个是没有错误的啊 只是出现了段错误
qq120848369 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

引用 1 楼 的回复:
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");

你能区分出什么是指针, 什么是函数调用吗。

这难道不是函数调用吗?指针就是变量的地址撒 这里有什么概念模糊的地方吗?望指教
[/Quote]

它需要你传入函数指针,你传入的是函数的返回值,难道你的函数返回值是一个函数指针?
zhxfzls 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");

你能区分出什么是指针, 什么是函数调用吗。
[/Quote]
这难道不是函数调用吗?指针就是变量的地址撒 这里有什么概念模糊的地方吗?望指教
qq120848369 2012-09-03
  • 打赏
  • 举报
回复
tact.sa_handler = ImportData("test4.db","test","zh1.txt",",","errmsg");

你能区分出什么是指针, 什么是函数调用吗。

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧