Добрый день всем. Столкнулся с такой проблемы, после выделении памяти и использовании, не могу потом освободить её, пробовал c GlobalFree которая возвращает тот же указатель а не 0 потом попробовал сделать на HeapXXXX такая же проблема. Вот кусок кода: Код (Text): invoke CreateFile,addr BanFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL .if eax!=-1 mov hFile,eax invoke GetFileSize,hFile,NULL mov BanFileSize,eax ;------------------------------------------------------------------) invoke HeapCreate,HEAP_NO_SERIALIZE,[BanFileSize],NULL mov hMem,eax invoke HeapAlloc,hMem,HEAP_ZERO_MEMORY,[BanFileSize] mov pMem,eax ;invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,[BanFileSize] ;mov hMem,eax ;invoke GlobalLock,hMem ;mov pMem,eax ;------------------------------------------------------------------) invoke HeapCreate,HEAP_NO_SERIALIZE,[BanFileSize],NULL mov hBan,eax invoke HeapAlloc,hBan,HEAP_ZERO_MEMORY,[BanFileSize] mov pBan,eax ;invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,[BanFileSize] ;mov hBan,eax ;invoke GlobalLock,hBan ;mov pBan,eax ;------------------------------------------------------------------) invoke ReadFile,hFile,pMem,BanFileSize,addr RealySize,NULL mov eax,[BanFileSize] mov ebx,[pMem] mov byte ptr [ebx+eax],0 invoke SendMessage,hEditor,WM_SETTEXT,FALSE,ebx mov ebx,[pMem] mov edx,[pBan] xor edi,edi .while edi<=[BanFileSize] mov al,byte ptr [ebx] .if al!=0Dh .if al==0Ah mov byte ptr [edx],0 .else mov byte ptr [edx],al .endif inc SizepBan inc edx .endif inc ebx inc edi .endw invoke HeapFree,hMem,HEAP_NO_SERIALIZE,pMem invoke CloseHandle,hFile если освобождать сразу после выделения памяти прокатывает, если после маневров с памятью, то не хочет ... подскажите в чем проблема ... (ой не туда пост засунул)
Код (Text): mov eax,[BanFileSize] mov ebx,[pMem] mov byte ptr [ebx+eax],0 Под pMem нужно выделять на один байт больше, [BanFileSize]+1. При таком коде, как сейчас, затирается первый байт после выделенной памяти. В котором запросто могут храниться системные данные.