c - realloc() 在 Windows 7 中成功,但在 Windows XP 中失败,为什么?

2024-03-26

所以我的这段代码有以下内容realloc block:

char **ptr = NULL;

void realloc_ptr(unsigned int new_size)
{    
    void *temp = NULL;

    temp = realloc(ptr, new_size * sizeof(*ptr));

    if(temp != NULL) {
        ptr = temp;
    }
    else {
        exit(EXIT_FAILURE);
    }
}

new_size在调用该函数之前递增。该数组始终仅扩展。还,new_size我的代码中永远不会超过 3(目前)。

现在上面的realloc在我在 Windows 7 中测试期间,调用工作正常。当我在 XP 中测试此代码时,上面的代码将成功 3 次,然后在第 4 次时抛出异常。当我回到代码时,我会发布确切的异常(这台计算机没有代码)。

我猜测我的内存碎片太多,系统无法分配连续的内存块。我已经测试了我的代码是否存在内存泄漏并修复了所有问题(我希望如此)。有什么想法为什么会发生这种情况吗?

EDIT:

当我使用 Doug Lea 的时候,上述问题就消失了malloc.c http://gee.cs.oswego.edu/pub/misc/malloc.c。但我还是想知道为什么会这样。

Thanks!


我最好的猜测是new_size太大而无法在连续的虚拟内存中使用。您永远无法确定 32 位系统上是否有大量连续虚拟内存可用。

通常,您应该尝试使用多个较小的块,如果可能的话,甚至不要同时分配所有块,而是在释放前一个块后分配下一个块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c - realloc() 在 Windows 7 中成功,但在 Windows XP 中失败,为什么? 的相关文章

随机推荐

  • 使用 bash 从文本文件中读取字符

    有谁知道如何使用 bash 脚本从文件中读取前两个字符 有问题的文件实际上是一个 I O 驱动程序 其中没有换行符 并且实际上无限长 The read内置支持 n范围 echo Two chars while read n 2 i do e
  • 从 Web 项目中排除 node_modules 目录

    如果我右键单击我的项目并选择 发布 Web 项目 我将收到有关目录名称长度的错误 我已经追踪到了node modules 我想从进程中排除该目录及其内容 我们使用一个 pubxml文件 我尝试添加以下内容之一或以下内容的组合
  • 强制渲染已计算的反应元素

    我正在尝试构建一个闪亮的应用程序 通过不同的 render 函数输出多个结果 问题是其中一个结果需要一些时间来计算 所以我希望shiny能够尽快渲染出快速的结果 这是一些代码来说明 ui R library shiny shinyUI fl
  • C++20 模块导出模板实例化

    我正在创建一个库 并且 C 20 模块内有一个类模板 我想添加一个实例化 以减少使用我的库的每个项目的编译时间 这些不同的实现是否等效 或者是否有更好的方法来实现 1 mod cpp export module mod export tem
  • QProcess未知错误

    我遇到了奇怪的问题 QProcess 只是不工作 并且错误未知 我在标头中有全局变量 QProcess importModule 我得到了这个功能 我尝试了start and startDetached顺便说一句方法 void App op
  • jQuery UI 在搜索之前自动完成显示结果

    我希望在我的项目中在关注自动完成输入之前显示一些初步结果 这些结果应该与自动完成 ajax 请求的结果相同 我可以通过自动完成的标准选项来做到这一点 还是应该编写相同的 JavaScript 代码 您应该设置minLength选项0 如果您
  • 如何使用javascript下载网页[重复]

    这个问题在这里已经有答案了 可能的重复 Javascript 可以读取任何网页的源代码吗 https stackoverflow com questions 680562 can javascript read the source of
  • 打印 C 字符串(UTF-8)时的 NSLog() 与 printf()

    我注意到 如果我尝试使用格式说明符 s 打印包含 UTF 8 字符串表示形式的字节数组 printf 说得对 但是NSLog 得到它乱码 即 每个字节按原样打印 因此例如 被打印为2个字符 这很奇怪 因为我一直认为NSLog 只是print
  • 如何根据条件 $push 字段?

    我试图在 MongoDB 聚合管道的 group 阶段有条件地将字段推入数组 本质上 我有包含用户名的文档以及他们执行的一系列操作 如果我将用户操作分组如下 group id name user name actions push acti
  • rows_merged在compactionhistory中意味着什么?

    当我发出 nodetool compactionhistory I get compacted at bytes in bytes out rows merged 1404936947592 8096 7211 1 3 3 1 什么是 1
  • 允许在 ckeditor 中嵌入 oembed 标签

    我想将 oembed 标签放入 TYPO3 的 ckeditor RTE 中 这样我想将像 Instagram Facebook 或 Twitter 这样的社交帖子放入一些新闻文章中 在一些文本的中间 为此 我激活了 ckeditor 的嵌
  • 快速连续旋转动画不那么连续

    这是我的代码 目的是连续旋转名为 swirls l 的 UIImageView 但是 每次旋转开始 结束之间都会有一个小暂停 我已经浏览了每一个动画教程 但无法弄清楚错误是什么 let fullRotation CGFloat M PI 2
  • 库中是否可以有 SyncAdapter?

    我正在开发一个将由多个应用程序使用的库 图书馆需要进行网络同步 我已经创建了一个存根提供商和帐户 如此处所述 http developer android com training sync adapters index html 问题是
  • MongoDB 查询注释以及用户信息

    我正在使用 nodejs 和 mongod 不是 mongoose 创建一个应用程序 我有一个问题让我头痛了几天 有人请建议一个方法 我有一个像这样的 mongodb 设计 post id ObjectId picture some url
  • Django - 使用 ManyToManyField 进行反向查找

    我正在尝试遵循 django 文档中的代码 class Person models Model name models CharField max length 128 def unicode self return self name c
  • 相当于 float128

    如何使用等效的 float128在Python中 我应该使用什么精度decimal getcontext 我的意思是 精度是以小数位还是位指定的 from decimal import getcontext prec 34 or 128 是
  • 如何在 Selenium Python 中设置 Chrome 的首选项

    我可以如下设置 Firefox 的首选项 set preference profile set preference set preference network http response timeout 30 set preferenc
  • 如何为特定类别自定义 AutoFixture 行为

    我需要启用 AutoFixture 来创建具有循环引用的类型实例 来自第三方提供的 API 为此 我可以删除默认的ThrowingRecursionBehavior如下所示 public class RecursiveObjectCusto
  • Backbone JS 模型和集合 URL

    如果我有一个名为 Book 的模型和一个名为 Library 的集合 定义如下 Book app Book Backbone Model extend defaults title No title author Unknown Libra
  • c - realloc() 在 Windows 7 中成功,但在 Windows XP 中失败,为什么?

    所以我的这段代码有以下内容realloc block char ptr NULL void realloc ptr unsigned int new size void temp NULL temp realloc ptr new size