-
-
Notifications
You must be signed in to change notification settings - Fork 4.7k
Closed
Description
Description
When using malloc_dbg.h to keep track of memory allocations, the program throw a read access violation. tmp was nullptr. in file malloc_dbg.c at line :
C/developer_tools/malloc_dbg.c
Line 215 in cc241f5
| if (tmp->ptr == ptrToFree) |
when calling malloc _dbg inside a loop.
This issue is happening because of the malloc_debug fonction.
pos = inList(filename, line);
if (pos == -1)
{
// Add a new element in the mem_info list
memoryInformation = addMemInfo(memoryInformation, ptrToReturn, bytes, line, filename, functionName);
if (!memoryInformation)
{
free(ptrToReturn);
return NULL;
}
}
else // If malloc was already called from the same file at the same line
{
// Here there are no call of [addMemInfo](https://github.com/TheAlgorithms/C/blob/cc241f58c253c533ac94e07151ef91a5ef7e5719/developer_tools/malloc_dbg.c#L40-L70) so the pointer that we return is not saved in the linked list
// so we will never be able to free it later.
editInfo(pos, bytes);
}
return ptrToReturn;
Expected behavior
ptrToReturn being added to the linked list
Actual behavior
only the sizeof ptrToReturn is saved into the list and it throws a read access violation
Possible fix
remove the inList() condition check and the editInfo() call
Steps to reproduce
Replace developer_tools/test_malloc_dbg.c main() by :
int main(int argc, char* argv[])
{
int* test_list[5] = {NULL};
for (unsigned i = 0; i < 5; i++)
{
test_list[i] = malloc(sizeof(int));
}
for (unsigned i = 0; i < 5; i++)
{
free(test_list[i]);
}
return 0;
}
Context
Got this bug when trying to allocate multiple blocks of memory in a loop and using malloc_dbg macros.
Additional information
No response