为什么 free 出错?
char * cReqStr;
char * cPayStr;
REQUEST * reqStruct;
PAYMENT * payStruct;
log->WriteFile(_T("Java_nnes_cm_CmPaymentNativeMethods_telegramProc Start"));
cReqStr = jstring2window(env,reqStr);
cPayStr = jstring2window(env,payStr);
reqStruct = getRequestStructMFC(cReqStr);
payStruct = getPaymentStructMFC(cPayStr);
log->WriteFile(_T("Java_nnes_cm_CmPaymentNativeMethods_telegramProc getPaymentStruct end"));
free(cReqStr);
cReqStr = NULL;
free(cPayStr);
cPayStr = NULL;
log->WriteFile(_T("Java_nnes_cm_CmPaymentNativeMethods_telegramProc free end"));
// start
IOpClient* i_opc = new IOpClient;
IRequestTelegram* i_rq = new IRequestTelegram;
IPaymentTelegram* i_py = new IPaymentTelegram;
IResultTelegram* i_rs = new IResultTelegram;
CoInitialize(NULL);
log->WriteFile(_T("Java_nnes_cm_CmPaymentNativeMethods_telegramProc CoInitialize(NULL) end"));
i_opc->CreateDispatch("StandardOpclient.OpClient");
i_rq->CreateDispatch("StandardOpClient.RequestTelegram");
i_py->CreateDispatch("StandardOpClient.PaymentTelegram");
i_rs->CreateDispatch("StandardOpClient.ResultTelegram");
log->WriteFile(_T("Java_nnes_cm_CmPaymentNativeMethods_telegramProc CreateDispatch end"));
i_rq->SetMallid((*reqStruct).mallid);
i_rq->SetTermno((*reqStruct).termno);
i_rq->SetOrder((*reqStruct).order);
i_rq->SetGcode((*reqStruct).gcode);
i_rq->SetPaydate((*reqStruct).paydate);
i_rq->SetName((*reqStruct).name);
i_rq->SetCardno((*reqStruct).cardno);
i_rq->SetLimit((*reqStruct).limit);
i_rq->SetPrice((*reqStruct).price);
log->WriteFile(_T("Java_nnes_cm_CmPaymentNativeMethods_telegramProc IRequestTelegram set end"));
i_py->SetPaycode((*payStruct).paycode);
i_py->SetPaysday((*payStruct).paysday);
i_py->SetDivcount((*payStruct).divcount);
i_py->SetBonusm((*payStruct).bonusm);
i_py->SetBonusc((*payStruct).bonusc);
i_py->SetBonusp((*payStruct).bonusp);
log->WriteFile(_T("Java_nnes_cm_CmPaymentNativeMethods_telegramProc IPaymentTelegram set end"));
char * tempStr = new char[256];
strcpy(tempStr , "i_rq->GetMallid()=");
char* rstr = getRealValue(i_rq->GetMallid());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_rq->GetTermno()=");
rstr = getRealValue(i_rq->GetTermno());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_rq->GetOrder()=");
rstr = getRealValue(i_rq->GetOrder());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_rq->GetGcode()=");
rstr = getRealValue(i_rq->GetGcode());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_rq->GetPaydate()=");
rstr = getRealValue(i_rq->GetPaydate());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_rq->GetName()=");
rstr = getRealValue(i_rq->GetName());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_rq->GetCardno()=");
rstr = getRealValue(i_rq->GetCardno());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_rq->GetLimit()=");
rstr = getRealValue(i_rq->GetLimit());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_rq->GetPrice()=");
rstr = getRealValue(i_rq->GetPrice());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_py->GetPaycode()=");
rstr = getRealValue(i_py->GetPaycode());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_py->GetPaysday()=");
rstr = getRealValue(i_py->GetPaysday());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_py->GetDivcount()=");
rstr = getRealValue(i_py->GetDivcount());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_py->GetBonusm()=");
rstr = getRealValue(i_py->GetBonusm());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_py->GetBonusc()=");
rstr = getRealValue(i_py->GetBonusc());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "i_py->GetBonusp()=");
rstr = getRealValue(i_py->GetBonusp());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
log->WriteFile(_T("TelegramProc start"));
//売上処理実行
short sret;
sret = i_opc->TelegramProc(i_rq->m_lpDispatch , i_py->m_lpDispatch , i_rs->m_lpDispatch);
log->WriteFile(_T("TelegramProc end"));
char * intStr = new char[256];
strcpy(intStr , "sret=");
sprintf(intStr + 5,"%d",sret);
log->WriteFile(_T(intStr));
delete intStr;
intStr = NULL;
CString totalResult = "returncode=" + i_rs->GetReturncode();
strcpy(tempStr , "i_rs->GetReturncode()=");
rstr = getRealValue(i_rs->GetReturncode());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
strcpy(tempStr , "totalResult=returncode=");
rstr = getRealValue(i_rs->GetReturncode());
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
//応答電文情報設定
if(sret == 0){
log->WriteFile(_T("sret=0 process call"));
CString data = i_rs->GetData();
CString time = i_rs->GetTime();
CString voucher = i_rs->GetVoucher();
CString approval = i_rs->GetApproval();
CString order = i_rs->GetOrder();
CString price = i_rs->GetPrice();
CString companycode = i_rs->GetCompanycode();
totalResult = "data=" + data + "\n" + "time=" + time + "\n" + "voucher=" +
voucher + "\n" + "approval=" + approval + "\n" + "order=" + order
+ "\n" + "price=" + price + "\n" + "companycode=" + companycode +
"\n" + totalResult;
}
log->WriteFile(_T("totalResult append"));
strcpy(tempStr , "totalResult=");
rstr = getRealValue(totalResult);
strcat(tempStr,rstr);
delete rstr;
rstr = NULL;
log->WriteFile(_T(tempStr));
delete tempStr;
tempStr = NULL;
char * rr = (char *)malloc(totalResult.GetLength() + 1);
strcpy(rr,totalResult);
cResStr = window2jstring(env,rr);
free(rr);
rr = NULL;
log->WriteFile(_T("Java_nnes_cm_CmPaymentNativeMethods_telegramProc window2jstring end"));
try{
log->WriteFile(_T("free((*reqStruct).cardno"));
free((*reqStruct).cardno); //<------------- exception
(*reqStruct).cardno = NULL;
}catch(...)
{
log->WriteFile(_T("free((*reqStruct).cardno error"));
}
.........