GNU buffer overflow using malloc

这一生的挚爱 提交于 2020-01-07 09:54:17

问题


I am running in a loop the following function:

int* rpermute(int n)
{
    int* a = malloc(n * sizeof(int));
    int  k;

    for (k = 0; k < n; k++)
    {
       a[k] = k;
    }

    for (k = n - 1; k > 0; k--)
    {
       int j    = rand() % (k + 1);
       int temp = a[j];
       a[j]     = a[k];
       a[k]     = temp;
   }

   return a;
}

If I set a new int variable in my code every variable is changing, I assume it is a buffer overflow problem.

Running the valgrind i get the following:

==4459== 73,036 bytes in 19 blocks are definitely lost in loss record 1 of 1

==4459==    at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)

==4459==    by 0x402CFB: rpermute (in /home/giwrgos/Desktop/crowdv22/crowd_evacuation)

==4459==    by 0x403378: main (in /home/giwrgos/Desktop/crowdv22/crowd_evacuation)

I use linux through the virtualbox but I have set enough storage and ram, what should I do?


回答1:


EDIT: See poster's comment below, the problem is not in this code after all.

You should simply free() the memory allocated in and returned by rpermute(). This must be done in the code from where you call rpermute(), once you're done with this array.

I understand that you regenerate this array for differing int values (the n parameter of rpermute()). Perhaps you simply assign a new output to the array you keep:

int* array;
...
array = rpermute(100);

// Some time later.
array = rpermute(200);  // Previous array memory is leaking.

You should do instead:

free(array);
array = rpermute(200);

Note that this is not a 'buffer over flow', but a memory leak instead. I checked you code for buffer overflow: index of a points outside it, but this seemed to be ok in both loops.



来源:https://stackoverflow.com/questions/20922765/gnu-buffer-overflow-using-malloc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!