用VC编了一个dll,其中有个函数:
int __stdcall Read(LPSTR ReadData)
{
ReStr[0]='a';
ReStr[1]='a';
ReStr[2]='a';
ReStr[3]='a';
ReStr[4]='a';
ReStr[5]='a';
strcpy(ReadData, ReStr);
}
在应用程序中调用该DLL中的Read函数,方法如下:
方法一:
char ReStr[]="1111111";
int a;
a=Read(ReStr);
编译没问题,执行时说内存不可为“writed”!
方法二:
char *ReStr;
memset(ReStr,0,sizeof(ReStr));
int a;
a=Wln_ComPlc_Read(ReStr);
同样出错!同样的错误!以上dll,我在VB中调用,方法:
Dim strs As String
strs = Space$(6)
aaa = Read(strs)
一切正常。
那位高手指点一下迷津,不甚感激。
int __stdcall Read(LPSTR ReadData)
{
ReStr[0]='a';
ReStr[1]='a';
ReStr[2]='a';
ReStr[3]='a';
ReStr[4]='a';
ReStr[5]='a';
strcpy(ReadData, ReStr);
}
在应用程序中调用该DLL中的Read函数,方法如下:
方法一:
char ReStr[]="1111111";
int a;
a=Read(ReStr);
编译没问题,执行时说内存不可为“writed”!
方法二:
char *ReStr;
memset(ReStr,0,sizeof(ReStr));
int a;
a=Wln_ComPlc_Read(ReStr);
同样出错!同样的错误!以上dll,我在VB中调用,方法:
Dim strs As String
strs = Space$(6)
aaa = Read(strs)
一切正常。
那位高手指点一下迷津,不甚感激。
int a;
a=Read(ReStr);
自己拷贝给自己?????
方法1中,char ReStr[]="1111111"; "1111111"本身是一个常量字符串。
方法2中,char *ReStr;memset(ReStr,0,sizeof(ReStr));ReStr指针未初始化,memset就能导致内存乱掉。正确的用法,应该是
char* ReStr = new char[目标大小];
Read(ReStr);delete[] ReStr;或者
int nSize = 足够大的字节数
char ReStr[nSize]; memeset(ReStr, 0, sizeof(char)*nSize);Read(ReStr);
memset(ReStr,0,sizeof(ReStr));没分配就写,看来你还不懂什么是指针啊