Я пишу службу Windows, которая динамически распределяет память. Я пробовал как новый оператор c ++, так и malloc C. Они возвращают (вероятно, действительный) указатель, но когда я пытаюсь разыменовать его, программа вылетает с 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;
}