为什么DELETE总是出错
开始我以为因为COPYMEMORY的长度超过了原来申请的大小的时候才出错的
后来我把申请的空间变大,但是也是出错,为什么呢?
- C/C++ code
if( Str != NULL ) { DWORD SourceLen = _tcslen( *Str ); DWORD InsertLen = _tcslen( &Text ) - 1; TCHAR *TempStr = new TCHAR[ SourceLen + InsertLen + 100]; CopyMemory( TempStr,*Str,Location * sizeof(TCHAR) ); TempStr[ Location ] = Text;//[i - Location - 1]; CopyMemory( TempStr + (Location +1),*Str + Location + InsertLen,(SourceLen - Location - InsertLen + 1 ) * sizeof(TCHAR)); //TempStr[SourceLen + InsertLen + 1 ] = '\0'; delete [] *Str; *Str = TempStr; }
[解决办法]
DWORD SourceLen = _tcslen( *Str );
DWORD InsertLen = _tcslen( &Text ) - 1;
去红的
[解决办法]
问题叙述不清
[解决办法]
[解决办法]
HRESULT InsertText( TCHAR **Str,DWORD Location,TCHAR Text )
如果是TCHAR Text :
那么传进来的就是一个字符,何来的长度?
如果是TCHAR *Text:
那么
DWORD InsertLen = _tcslen( &Text ) - 1;
就是错的。
[解决办法]
你应该把调用该函数时传递进来的Str是如何分配的代码贴出来才好判断!
[解决办法]
new 就是错的,还谈什么delete !
[解决办法]
HRESULT InsertText( TCHAR **Str,TCHAR *Text )
{
if( *Str != NULL )
{
DWORD SourceLen = _tcslen( *Str );// 因为 **
DWORD InsertLen = _tcslen( Text ) - 1;
afxDump << InsertLen << "\n";
//否则谁知道 InsertLen 是什么?
TCHAR *TempStr = new TCHAR[ SourceLen + InsertLen ];
_tcscpy( TempStr,*Str,InsertLen );
...
仔细看看
[解决办法]
DWORD InsertLen = _tcslen( Text );// - 1;
[解决办法]
给你改写了一个:
- C/C++ code
char *InsertText(char *Src,int Loc,char *Insert){ if( Src != NULL ) { DWORD SourceLen = _tcslen(Src); DWORD InsertLen = _tcslen(Insert); char *TempStr = new char[SourceLen + InsertLen]; strncpy(TempStr,Src,Loc); strcpy(&TempStr[Loc],Insert); strcpy(&TempStr[Loc+InsertLen],&Src[Loc]);// return TempStr; }// return 0;}///////////// call://"ABCDE12345FGHIJ"char src[]="ABCDEFGHIJ";char ins[]="12345";char *pAll=InsertText(src,5,ins);delete []pAll;