Чтение ошибок нарушения прав доступа в моей программе Qt - PullRequest
0 голосов
/ 08 мая 2020

В настоящее время я пытаюсь переписать старую программу, написанную с помощью C#, в ту же программу, но на Qt.

Я новичок в C ++ (полтора месяца) и имею нет наставника, чтобы спросить, поэтому я надеюсь, что кто-то из вас может помочь решить мою проблему,

Одна из функций в коде ссылается на внешний файл dll и использует две функции оттуда. И в большинстве случаев это дает мне ошибку нарушения прав доступа для чтения. (иногда работает)

Код выглядит так.

main. cpp

void DecodeImage(QByteArray inputData)
{
   int imageSize = inputData.Length();
   unsigned char* ptr = DecompressImage((unsigned char*)inputData.data(), &imageSize);

   QByteArray result = QByteArray((char*)ptr, imageSize);

   FreeMemory(ptr);
}

decopressor.h

#if _WINDLL
#define EXPORT __declspec(dllexport)
#else
#define EXPORT
#endif

#if defined(__cplusplus)
extern "C"
{
#endif
    EXPORT unsigned char* DecompressImage(unsigned char* input, int *length);
    EXPORT void FreeMemory(unsigned char* pointer);
#if defined(__cplusplus)
}
#endif

А также у меня нет доступа к исходному коду dll.

Я думал, что мои входные данные неверны, поэтому я сравниваю все входные данные, которые входят в dll, с C# версии, оказывается, они все одинаковы.

Код ошибки такой, и программа выдает из библиотеки функцию DecompressImage .

test.exe: 0xC0000005: Место чтения нарушения прав доступа 0x0000000007CA4000.

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

EDIT: забыл * at imageSize в результате.

EDIT 2: удалил экспорт PNG строка

EDIT 3: с использованием действительного адреса вместо объявления нового указателя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...