内存分配和销毁-问题
例子1:
LPCSTR pc=(LPCSTR) malloc(15);
delete pc;
例子2:
LPCSTR pc= new char[15];
free((void*)pc);
-------------------------
例子1和例子2这样的内存分配和销毁是否合法?为什么?
好像delete 内部也用到 free?
-------------------------
例子3:
LPCSTR pc= new char[15];
GlobalFree((HGLOBAL) pc);
这样会报错:
HEAP[090903.exe]: Invalid Address specified to RtlFreeHeap( 00620000, 006018C8 )
--------------------------------
例子4:
LPSTR pc=(LPSTR)GlobalAlloc(GPTR,15);
free((void*)pc);
代码报错:
HEAP[090903.exe]: Invalid Address specified to RtlFreeHeap( 00C90000, 001F62B8 )
--------------------------------
例子5:
函数
BOOL __stdcall Example(LPSTR pc,DWORD buflen,LPDWORD returnbuflen){
if(pc!=NULL){
free((void*) pc);
pc=(LPSTR) malloc(buflen);
}
//这里为其他代码......
return (FALSE);
}
上面的
if(pc!=NULL){
free((void*) pc);
pc=(LPSTR) malloc(buflen);
}
这样的代码对不对? 我只想对外部的数据不感觉安全(如果存在缓冲区溢出),所以想释放再分配,运行居然成功了! 但如果pc在外部不是用malloc分配的,如果是用new,用GlobalAlloc,这样的代码是不是有问题了??高人讲解一下,诸如BOOL __stdcall Example(LPSTR pc,DWORD buflen,LPDWORD returnbuflen)就像GetWindowsDirectory函数类似的函数,需要用char*指针、缓冲字符作为参数的,应该如何代码编写就是正确的,以及如何防止类似的代码缓冲区溢出?????
---------------------------------------------------------------
这样对不对
bool __stdcall CharToLowerA( const char* oriChars,char* lowChars,size_t lowCharsLen){
if(oriChars==0 ||lowCharsLen==0) return false;
lowChars= new char[lowCharsLen];
for(size_t i =0;i<lowCharsLen;i++){
lowChars[i]=(char)tolower( oriChars[i]);//Asni使用tolower
}
lowChars+='\0';
return true;
}