我正在編寫一個動態分配內存的Windows服務。我嘗試了C++的新操作符和C的malloc。他們返回(可能是有效的)指針,但是當我嘗試取消對它的引用程序崩潰與Windows話說:內存分配問題
在「0x77c478ac」在「0x00cb9001」 指令引用內存。 內存不能被「讀取」。
順便說一句我猜指針是有效的,因爲引用的內存不是NULL(0x00cb9001)。
編輯:這裏是代碼
/* This is a thread procedure that is
called when connection arrives
and its purpose is to serve as a
regular expression server.
*/
void threadProc(LPVOID *ptr){
SOCKET accSock = (SOCKET) *ptr;
void * foundPtr;
int recvdBytes;
char * literalPtr;
u_long iMode = 0;
literalPtr = new char [4096]; //this may cause the problem
//We allocate 4kb but in fact the first 2 kbs will be for
//for the literal string, the next 2 kb are for the result
//that must be returned
ioctlsocket(accSock, FIONBIO, &iMode); //the "parent" socket was nonblocking
if(literalPtr){
recvdBytes = recv(accSock, (literalPtr+1), 2048, 0); //BTW, recv returns -1
foundPtr = regexp_cmp(literalPtr, fBuffer, 0); //program crashes when calling this function
if(!foundPtr){
*(literalPtr+2048) = (int) 0;
send(accSock, (char *) (literalPtr+2048), 4, 0); //sending 4 NULLs
}
else {
send(accSock, (char *) (literalPtr+2048), 2048, 0);
}
shutdown (accSock, 0);
delete[] literalPtr;
return;
}
你需要顯示所涉及的代碼,你使用的指針*絕對*無效,如果它是你不會像你顯示的那樣在手上崩潰。 – 2011-02-26 09:54:44
您是否將指針傳遞給其他進程? – 2011-02-26 10:01:09
不會。分配問題發生在線程中,並且不會將指針傳遞給其他線程或進程。 – 2011-02-26 10:33:57