データベースの接続をチェックする簡単な pro*c プログラムを作成しました。コードは次のとおりです。
int main()
{
char *conn_string = "IDA/IDA@DBISPSS";
int x = 10;
printf("value of x is before db connection %d\n",x);
printf(" conn_string %s \n",conn_string);
EXEC SQL CONNECT :conn_string;
EXEC SQL SELECT 1 INTO :x FROM DUAL;
printf("value of x is %d\n",x);
return 0;
}
pro*c コードの実行可能ファイル (test_connection) を作成するために実行した次のコマンド
proc test_connection.pc
cc -I${ORACLE_HOME}/precomp/public -c test_connection.c
cc test_connection.o -o test_connection -L$ORACLE_HOME/lib -lclntsh
そして、test_connection exeを実行すると、出力は
value of x is before db connection 10
conn_string IDA/IDA@DBISPSS
Segmentation fault
しかし、同じコードは、別の Linux マシンと Solaris マシンでもうまく機能します。
セグメンテーション違反がスローされるのはなぜですか?