gpt4 book ai didi

c - 使用 malloc 的 GNU 缓冲区溢出

转载 作者:行者123 更新时间:2023-11-30 18:57:29 25 4
gpt4 key购买 nike

我正在循环运行以下函数:

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;
}

如果我在代码中设置一个新的 int 变量,每个变量都会发生变化,我认为这是缓冲区溢出问题。

运行 valgrind 我得到以下信息:

==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)

我通过 virtualbox 使用 Linux,但我已经设置了足够的存储和 RAM,我该怎么办?

最佳答案

编辑:请参阅下面发帖人的评论,问题毕竟在此代码中。

您应该简单地free()分配并由rpermute()返回的内存。使用完该数组后,必须在调用 rpermute() 的代码中完成此操作。

据我所知,您会为不同的 int 值(rpermute()n 参数)重新生成此数组。也许您只需将新输出分配给您保留的数组:

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

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

你应该这样做:

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

请注意,这不是“缓冲区溢出”,而是内存泄漏。我检查了您的代码是否存在缓冲区溢出:a 的索引指向其外部,但这在两个循环中似乎都没问题。

关于c - 使用 malloc 的 GNU 缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20922765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com