小编Aru*_*san的帖子

如何模拟Linux中的"内存不足问题"

我想重现一个问题,先决条件是设置系统"Out of memory"然后检查进程的行为方式.

在不影响其他用户的情况下,我必须模拟这个问题,因为许多其他用户并行使用Linux机器.

linux

1
推荐指数
1
解决办法
129
查看次数

当输入地址指向无效地址时,realloc崩溃

realloc可以返回相同的输入地址或不同的地址.如果它返回一个不同的地址,那么它将在内部解除分配/释放输入内存并将该内容移动到另一个位置并返回该新地址.

请考虑以下情况.

new_ptr = realloc (2000, 10000)  // Lets assume the input address is 2000 

// Lets assume the new_ptr address is 3000
Run Code Online (Sandbox Code Playgroud)

因此,内部realloc将释放指针指向2000的内存并将这些数据移动到新位置3000并返回3000地址.

现在地址2000指向无效.因此,reallocAPI 未将其分配给NULL .

现在,将该无效地址传递给realloc函数.实时可能存在realloc可能获得无效输入地址的更改.

new_ptr = realloc(2000, 10000)
Run Code Online (Sandbox Code Playgroud)

此2000地址无效,因为它已被前一个释放realloc.现在程序崩溃了.

我可以通过以下方式解决此问题.

      if (new_ptr != old_ptr ) {
        old_ptr = NULL;                      
      }
Run Code Online (Sandbox Code Playgroud)

由于old_ptr无效.我将它分配给NULL.请确认我的更正.

c memory-management realloc

0
推荐指数
1
解决办法
212
查看次数

标签 统计

c ×1

linux ×1

memory-management ×1

realloc ×1