Эта ошибка возникает только при сборке с компилятором WinmaDK nmake в 'free' (выпуск), который выполняет оптимизацию. Я не могу воспроизвести это в «проверенной» сборке или компиляции с VS.
Вот псевдокод того, что происходит в моем коде:
main()
{
//variable init and other code
fprintf(log, "pre nullValue: %lu\n", NULL); //printf added for debugging
otherFunc();
funcWithError(str1, str2, NULL);
fprintf(log, "post nullValue: %lu\n", NULL);
fprintf(log, "post2 nullValue: %lu, %lu, %lu\n", NULL, 0, NULL);
}
BOOL otherFunc()
{
//variable init and other code
callToDll();
//...doing stuff
libusb_usb_open(var1); //If I remove this line there is no problem!!
//...doing more stuff
}
BOOL funcWithError(char* s1, char* s2, FUNC_PTR fp)
{
fprintf(log, "inFunc nullValue: %lu, %lu\n", NULL, fp);
if(fp != NULL)
return FALSE; //This line is being executed erroneously!!
}
Вывод в лог:
pre nullValue: 0
inFunc nullValue: 0, 251208
post nullValue: 251208
post2 nullValue: 251208, 251208, 251208
Примечание. Повторяющийся номер (251208) - это разное число при каждом запуске программы
Просто изменение этой строки исправляет / вызывает это. Это libusb usb_open вызов.
- В конечном счете, мой вопрос - выяснить, как решить проблему (я не могу избежать этого звонка)
- Но только на уровне управления стеком / памятью, как вообще возможно иметь значение NULL, отличное от нуля, и иметь буквенное значение '0', печатаемое как ненулевое?
дайте мне знать, какая другая информация может помочь ...