c++调用DLL文件时报错存在未处理的异常,写入位置时发送访问冲突?

#include "stdafx.h"
#include<windows.h>
#include <iostream>

HINSTANCE readdll;

typedef bool(WINAPI *Read_Error)(char* MError, int Meter_No, int Dev_Port);
Read_Error Readerr = NULL;

int _tmain(int argc, _TCHAR* argv[])
{
    char* str = new char[65535];

    readdll = LoadLibrary(L"kpdev.dll");    //加载动态链接库

    if (readdll != NULL)
    {
        std::cout << "加载成功!\n";
        Readerr = Read_Error(GetProcAddress(readdll, "Error_Read"));
        if (Readerr(str,8,1))
        {
            std::cout << str;
        }
    }

    FreeLibrary(readdll); // 动态释放DLL

    return 0;
}

是一个校准台官方提供的dll库,需要读取台子上的误差数据,是用过串口读取的,使用的USB转232线, 串口使用的COM1, 不接USB转485线的时候,也就是不存在COM1是读取不到数据,但是没有报异常,接上USB转485线之后,报了一个异常,截图在下面

下面是报错截图

图片说明

下面是这个dll文件函数的官方说明

图片说明

下面是官方说明里面调用例程

//读误差 注意参数*cstrData 要分配空间,否则可能内存数据错误

void __fastcall TFrmMain::MMOprErrorReadClick(TObject *Sender)
{
  StatusBarMain->Panels->Items[0]->Text = "";
  bool tt = false;
  AnsiString strPort = ComboBoxPort->Text.SubString(4, ComboBoxPort->Text.Length()-3);

  char *cstrData = new char[20];
  memset(cstrData, 0, 20);
  boRes = Error_Read(&cstrData, 2, StrToIntDef(strPort, 2));
  if (tt)
    Edit1->Text = AnsiString(cstrData);
  else
    Edit1->Text = "ERROR";
  delete [] cstrData;
}

是不是跟运行库有关呢,你试试Release版下会不会呢

0xcdcdcdcd 看到这个想都不用想就知道了,你分配了结构体一类的东西,其中包含指针,但是你没有初始化就用了这个指针。