Сбой OCIEnvCreate с ошибкой сегментации, обновлением приложения C ++ с Oracle 10g до 11g2

Гуру C ++, я полностью сбит с толку поведением некоторого кода, и мне нужно как можно больше помощи, чтобы разобраться с ним.

Я публикую приложение C ++ из Oracle 10g в 11g2, и код не может подключиться к базе данных Oracle. На самом деле, он выдает ошибку сегментации без выброса ядра, и я не могу понять, в чем проблема, потому что код отлично работает с Oracle 10g.

(*oci)->status = OCIInitialize(OCI_OBJECT, 0, 0, 0, 0);
(*oci)->status = OCIEnvInit(&(*oci)->envhp, OCI_DEFAULT, 0, 0);

Я просто заменил оба звонка на OCIEnvCreate (следуя документации Oracle)

Трассировка DBX четко указывает на то, что процесс OCIEnvCreate вызов функции. Если это помогает, вот последовательность вызовов, которые делает код:

t@6 (l@6) signal SEGV (no mapping at the fault address) in ltzGetFileContentVer at 0xfd5994d4

0xfd5994d4: ltzGetFileContentVer+0x0008:        ld       [%o0], %g4
Current function is oci_initialize

(dbx) where
current thread: t@6
[1] ltzGetFileContentVer(0xfbe80000, 0xfb9faf08, 0xfeccbda4, 0x0, 0xa70f04, 0xa6fea0), at 0xfd5994d4

[2] lditzver(0xfbe80000, 0x0, 0xfb9faf08, 0xfb9faf0a, 0x400, 0x0), at 0xfd5620cc

[3] kpuiniPG(0x270cf8, 0x1, 0xfebf76dc, 0xfe9f7ca8, 0xfe9f792c, 0x106c), at 0xfcc49b9c

[4] kpuinit0(0x1c2790, 0x20, 0xfe9be6fc, 0x270798, 0xfea43a90, 0xfcc495c4), at 0xfcc47808

[5] kpuenvcr(0x0, 0x1400, 0x0, 0x1b4000, 0x0, 0x40), at 0xfcc4659c

[6] OCIEnvCreate(0x1c2790, 0x0, 0x0, 0x0, 0x0, 0x20000), at 0xfcadb48c

=>[7] oci_initialize(oci = 0x2070f0), line 150 in "oci_helper.c"
int oci_initialize(oci_helper_t** oci)
{
if (NULL == oci)
return OCIHELP_INVALID_ARGUMENT;

*oci = (oci_helper_t*)malloc(sizeof(oci_helper_t));

if (NULL == *oci)
return OCIHELP_NOT_ENOUGH_MEMORY;

(*oci)->status = OCIEnvCreate(&(*oci)->envhp,(ub4) OCI_THREADED | OCI_OBJECT,0,0,0,0,0,0);
if ((*oci)->status != OCI_SUCCESS) {
return OCIHELP_CALL_ERROR;
}

(*oci)->status = OCIHandleAlloc((*oci)->envhp, (void*)&(*oci)->errhp, OCI_HTYPE_ERROR, 0, 0);
if ((*oci)->status != OCI_SUCCESS)
return OCIHELP_CALL_ERROR;

(*oci)->status = OCIHandleAlloc((*oci)->envhp, (void*)&(*oci)->srvhp, OCI_HTYPE_SERVER, 0, 0);
if ((*oci)->status != OCI_SUCCESS)
return OCIHELP_CALL_ERROR;

(*oci)->status = OCIDescriptorAlloc((*oci)->envhp, (void*)&(*oci)->msgprop, OCI_DTYPE_AQMSG_PROPERTIES, 0, 0);
if ((*oci)->status != OCI_SUCCESS)
return OCIHELP_CALL_ERROR;

return OCIHELP_CALL_OK;
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]