无论我做什么,我都无法说出为什么这是泄漏内存。我正在释放所有动态创建的内存,但它说我有 406 个泄漏。任何提示都会很棒。我花了一周的时间试图弄清楚并使用crtdbg
(不显示任何线条),VLD
但仍然没有运气。对不起长代码:
---------- Block 742 at 0x00F06D50: 56 bytes ----------
Call Stack:
c:\users\main\desktop\lab3123.c (113): lab3.exe!createNode + 0xA bytes
c:\users\main\desktop\lab3123.c (152): lab3.exe!addToArr + 0x9 bytes
c:\users\main\desktop\lab3123.c (66): lab3.exe!main + 0x10 bytes
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (555): lab3.exe!__tmainCRTStartup + 0x19 bytes
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (371): lab3.exe!mainCRTStartup
0x76713677 (File and line number not available): kernel32.dll!BaseThreadInitThunk + 0x12 bytes
0x775B9F42 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x63 bytes
0x775B9F15 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x36 bytes
Data:
74 65 63 68 6E 6F 6C 6F 67 79 00 CD CD CD CD CD technolo gy......
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD 01 00 00 00 ........ ........
---------- Block 746 at 0x00F06E20: 56 bytes ----------
Call Stack:
c:\users\main\desktop\lab3123.c (113): lab3.exe!createNode + 0xA bytes
c:\users\main\desktop\lab3123.c (152): lab3.exe!addToArr + 0x9 bytes
c:\users\main\desktop\lab3123.c (66): lab3.exe!main + 0x10 bytes
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (555): lab3.exe!__tmainCRTStartup + 0x19 bytes
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (371): lab3.exe!mainCRTStartup
0x76713677 (File and line number not available): kernel32.dll!BaseThreadInitThunk + 0x12 bytes
0x775B9F42 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x63 bytes
0x775B9F15 (File and line number not available): ntdll.dll!RtlInitializeExceptionChain + 0x36 bytes
Data:
68 75 6D 61 6E 69 74 79 00 CD CD CD CD CD CD CD humanity ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD ........ ........
CD CD CD CD 01 00 00 00 ........ ........
Visual Leak Detector detected 406 memory leaks (26480 bytes).
Largest number used: 43684 bytes.
Total allocations: 57944 bytes.
Visual Leak Detector is now exiting.
Press any key to continue . . .
WORDNEW* createNode(char *str)
{
WORDNEW* w;
if(!(w = (WORDNEW*)malloc(sizeof(WORDNEW))))
printf("Memory Allocation Error"),
exit(100);
strcpy(w->str, str);
w->count = 1;
return w;
}
//addToArr: adds a word to the hash array or linked list if there is a collision
void addToArr( char *str, HASH_ARR_ELEM hashArr[]){
int homeAddress = 0;
int addResult = 0;
int probe = 0;
HASH_ARR_ELEM *ph;
WORDNEW *w;
WORDNEW *rWord;
rWord = NULL;
homeAddress = hashFunct(str);
ph = &hashArr[homeAddress];
if(ph->wordPtr == NULL){
if(!(ph->wordPtr = (WORDNEW*)malloc(sizeof(WORDNEW))))
printf("Memory Allocation Error"),
exit(100);
strcpy(ph->wordPtr->str, str);
ph->wordPtr->count = 1;
}else if(ph->wordPtr != NULL && ph->headPtr == NULL){
if(!(strcmp(ph->wordPtr->str, str)))
ph->wordPtr->count++;
else {
ph->headPtr = createList(cmpWord);
w = createNode(str);
addNode(ph->headPtr,w,&probe);
}
}else {
w = createNode(str);
if(!(strcmp(ph->wordPtr->str, str))){
ph->wordPtr->count++;
free(w);
}else if(retrieveNode(ph->headPtr,w,&rWord,&probe) == 1){
rWord->count++;
free(w);
}else
addNode(ph->headPtr,w,&probe);
} //end else
} // end addToArr