c - sqlcxt() 中的段错误

标签 c oracle oracle-pro-c

我在我的 C 代码中使用以下函数连接到 oracle 数据库。下面的函数在其他时间工作时有时会导致段错误

static int Connect(char *string)
{
EXEC SQL BEGIN DECLARE SECTION;
    static char login[80];
EXEC SQL END DECLARE SECTION;

    strcpy((char *)login, string);

    EXEC SQL CONNECT :login ;

    if (sqlca.sqlcode < 0) 
        return(-1);
    return(0);
}

下面是使用核心文件生成的调试器报告。对此有任何建议。

program terminated by signal SEGV (no mapping at the fault address)
0xffffffffffffffff:     <bad address 0xffffffffffffffff>
Current function is Connect
    375    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);

  [20] 0xffffffff7e587078(0x0, 0x100210f80, 0xffffffff7fffc850, 0x1000e4dd0, 0xff000000000000, 0x8080808080808080), at 0xffffffff7e587078
=>[21] login(orastring = 0xffffffff7fffcef8 "user123/abcd@sunn.adams"), line 375 in "connect.c"

最佳答案

从调试器报告来看,seg fault是因为访问了不可访问的内存。

我建议在两个地方放置一些支票。 (a) 在使用之前检查输入参数 'string'NULL 值。 (b) 使用 strncpy() 而不是 strcpy()

关于c - sqlcxt() 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5278647/

相关文章:

无法在 Oracle Pro*C 中测试空值

c++ - PCC-S-02015, "unable to open include file"

C++ `assign()` 等价于 C

arrays - 如何确定 C 中数组的大小?

ruby-on-rails - rails : rake db:migrate *very* slow on Oracle

java - 准备语句错误

sql - Oracle Date TO_CHAR ('Month DD, YYYY' ) 中有额外的空格

flockfile函数可以用于进程吗

python - 为什么以下代码在 C 和 Python 中给出不同的输出?

c - 如何在 Linux 上编译 'C' 应用程序并在 Solaris 上正常编译和运行?