Re: memory leaks
sirisha ha scritto:
I am trying to develop an application to transfer a folder of files
using sockets. I have been using a loop to transfer all the files.
there are many memory leakage errors found in debugging. how can i
solve this?
the output is differing. and I am unable to find the exactly where
is the error in the code. could u please help regarding this.
the code for sending is like this : in which i am sending the contents
in the order
file size, filename size, file name, file contents
void Sender::SendData(void)
{
CString findFilePath=filePathInformation+"\\*.*";
bWorking=finder.FindFile(_T((LPCTSTR)findFilePath));
while (bWorking)
{
bWorking = finder.FindNextFile();
CString findFileName(finder.GetFileName());
if(findFileName.Compare(".") == 0 || findFileName.Compare("..") == 0)
{
//CloseSocket();
continue;
}
int returnValue=SetAddress();
if(returnValue==0)
{
CString sendFilePath=finder.GetFilePath();
FILE *filePointer;
//int returnedValue;
if( (filePointer = fopen(sendFilePath, "rb" )) == NULL )
{
cout<<endl<<"File open error";
CloseSocket();
return;
}
else
{
char *fileContentBuffer;
unsigned int bytesRead,fileNameLength;
long fileSize;
//long allocReqNum;
//first send the file size details
fseek(filePointer, 0, SEEK_END); // Move File Pointer to EOF
fileSize=ftell(filePointer); // Get position of File Pointer
rewind(filePointer); // Move File Pointer back to beginning of
file
fileContentBuffer = (char *)calloc(32,sizeof(long));
//returnedValue=_CrtIsMemoryBlock(fileContentBuffer, 32,
&allocReqNum, NULL, NULL);
ltoa( fileSize, fileContentBuffer,10 );
int returnValue = send(mySocket,fileContentBuffer,32,0);
if(returnValue == SOCKET_ERROR)
{
cout<<endl<<"Error in Sending File Length";
CloseSocket();
return;
}
else
cout<<endl<<"File Size Sent Successfully : "<<fileSize;
//long valueReturned=_CrtSetBreakAlloc(allocReqNum);
//delete fileContentBuffer;
free(fileContentBuffer);
//send file name length
fileNameLength=findFileName.GetLength();
fileContentBuffer = (char *)calloc(32,sizeof(int));
char *returnChar=itoa( fileNameLength, fileContentBuffer, 10 );
returnValue = send(mySocket,fileContentBuffer,32,0);
if(returnValue == SOCKET_ERROR)
{
cout<<endl<<"Error in Sending File Details";
CloseSocket();
return;
}
else
cout<<endl<<"File Length Sent Successfully : "<<fileNameLength;
free(fileContentBuffer);
//delete fileContentBuffer;
//Send the file name
char *temporaryBuffer;
fileContentBuffer = (char *)calloc(255,sizeof(char));
temporaryBuffer=findFileName.GetBuffer(fileNameLength);
strcpy(fileContentBuffer,temporaryBuffer);
returnValue = send(mySocket,fileContentBuffer,fileNameLength,0);
if(returnValue == SOCKET_ERROR)
{
cout<<endl<<"Error in Sending in File Name";
CloseSocket();
return;
}
else
cout<<endl<<"File Name Sent Successfully : "<<temporaryBuffer;
free(fileContentBuffer);
//delete fileContentBuffer;
//sending the file
fileContentBuffer = (char *)calloc(fileSize,sizeof(char));
bytesRead=fread(fileContentBuffer,sizeof(char),fileSize,filePointer);
returnValue = send(mySocket,fileContentBuffer,fileSize,0);
if(returnValue == SOCKET_ERROR)
{
cout<<endl<<"Error in Sending File Contents";
CloseSocket();
return;
}
else
cout<<endl<<"File Sent Successfully "<< returnValue<<" bytes";
//delete fileContentBuffer;
free(fileContentBuffer);
}
//returnedValue=_CrtDumpMemoryLeaks();
fclose(filePointer);
CloseSocket();
}
else
{
cout<<endl<<"Error in connecting";
CloseSocket();
return;
}
}
}
that would be greatful to me,
sirisha.
filePathInformation is a global CString? If yes try to place it inside
the function and see again if you have memory leaks.