Desperately asking for help...
I'm working on a DLL. The main code parts are following:
(I'm trying to include only IMPORTANT lines)
// basic custom datatype
struct gideElement {
float (**eleFunc)(unsigned int, gideElement**); // pointer to pointer to function
float (*eleFuncActual)(unsigned int, gideElement**); // pointer to function
}
// custom functions
float f01 (unsigned int argCnt, gideElement **funcArgs) {}
float f02 (unsigned int argCnt, gideElement **funcArgs) {}
// static enumerator for functions
typedef float (*MyFunc)(unsigned int, gideElement**);
const MyFunc allFuncs[] = { NULL, &f01, &f02};
// allocate memory for array of objects
arrGide = (gideElement*) malloc(sizeof (gideElement) * modelSize); // modelSize is "int"
// assign properties
(arrGide + i)->eleFuncActual = allFuncs[ f_code_actual ] // f_code_actual is function's index retrieved from DB
(arrGide + i)->eleFunc = &((arrGide + i)->eleFuncActual); // eleFunc will point to eleFuncActual
And now the problem. Once I compile the DLL without Whole Program Optimization, link with Link Time Code Generation set to Default and Enable Incremental Linking set to YES, the DLL works great.
However, once I set Release options (/GL for compiler and /ltcg /INCREMENTAL:NO for linker), the following condition evaluates to TRUE even if it's not!!!:
if ( *((arrGide + curIdx)->eleFunc) == allFuncs[53] )
{
// do some stuff only if we have eleFuncActual pointer pointing to function having index 53
}
In Debugger everything works. This issue happens only with Release configuration during Run-time.
I think that the /INCREMENTAL causes the problem. Does anybody know???
Thanks many times....
Start Free Trial