问题标签 [realloc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 如何确保调用者传递了 malloc 的指针?
我有一个函数,它将作为参数给出的指针重新分配给新大小。现在,问题在于 - 根据手册页 -realloc
需要一个已由malloc
或calloc
之前返回的指针。
如何确保调用者传递一个满足这些要求的指针?似乎没有内置的 C 机制(如类型限定符或其他东西)可以这样做。
现在,在我重组我的 API 之前(因为我认为现在的功能不够健壮) - 你能确认我没有错过任何东西吗?
提前致谢。
编辑: 一种解决方案显然是在函数中使用 malloc 。问题在于调用者没有“看到”分配。因此,我需要在文档中明确说明他必须释放指针。这比期望他们提供一个 malloc 的指针(这意味着调用者必须释放它)更糟糕。
我真正想要的是在编译时阻止滥用的东西。那,还有一匹小马。;-)
c - realloc() 失败并返回 NULL 时的正确用法是什么?
谁能总结一下正确用法是realloc()
什么?
realloc()
失败的时候怎么办?
从我目前看到的情况来看,如果realloc()
失败,你必须使用free()
旧指针。真的吗?
这是一个例子:
假设realloc()
在线失败3
。我在网上做正确的5
事free()
吗ptr
?
c - realloc 如何知道要复制多少?
realloc 如何知道原始数据的大小?
所以,如果实现是这样的:
我意识到这不是最初的实现,并且 realloc 并不总是免费的,但是当它这样做时,它复制了多少?
编辑:感谢您的回答。但是我怎样才能在我的代码中使用 malloc/free/.. 实现 realloc?
c++ - 你如何在 C++ 中“重新分配”?
我怎样才能realloc
在 C++ 中?语言中似乎缺少它 - 有new
但delete
没有resize
!
我需要它,因为当我的程序读取更多数据时,我需要重新分配缓冲区来保存它。我不认为delete
ing 旧指针和new
ing 一个新的、更大的指针是正确的选择。
c - realloc:反向指针数组?
我编写了一个相当简单(ish)的堆栈实现,如果需要,它会自动增长其内部数组缓冲区。
为此,我自然会使用realloc - 它可以工作,但是,所有数组元素在 realloc() 调用之后都是反向排序的。
有问题的代码:
此示例将触发所述行为:
我真的对此一无所知。请帮忙!
c - 如果没有顺序的内存空间,realloc 会做什么?
realloc
用于动态重新分配内存。
假设我使用该malloc
函数分配了 7 个字节,现在我想将其扩展为 30 个字节。
如果内存中没有 30 字节的连续(单行连续)空间,后台会发生什么?
是否有任何错误或将部分分配内存?
c - 简单的 c malloc
malloc
虽然 C/C++ 的/有许多不同的复杂实现free
,但我正在寻找一种非常简单且(尤其是)小的,适用于固定大小的缓冲区并支持realloc
. 不需要线程安全等,我的对象很小,大小变化不大。有什么可以推荐的实现吗?
编辑:
我将使用该实现作为接收器的通信缓冲区来传输可变大小的对象(接收器未知)。分配的对象不会存活很长时间,但可能同时使用多个对象。
由于每个人似乎都推荐标准 malloc,我也许应该重新提出我的问题。我需要的是在缓冲区之上“最简单”的 malloc 实现,我可以开始针对自己的需要进行优化。也许最初的问题不清楚,因为我不是在寻找优化的 malloc,而只是寻找一个简单的 malloc。我不想从 glibc-malloc 开始并扩展它,而是使用轻量级的。
c - realloc 可以在左侧缩小我的数组(仅限 C)吗?
我想移动我记忆中的大量数据。不幸的是,这些数据被保存为一个数组,我无法改变它。我不能使用循环数组,因为我不想更改的几个 fortran 方法也使用相同的内存。最重要的是,在移动之间非常频繁地访问数组。所以我可以这样做:
这应该可以正常工作,但看起来很浪费;)。如果我可以告诉我的编译器带走缩小数组左侧的数据,我的数据会在内存中爬行,但我不必进行任何复制。像这样:
所以基本上我想用一个指向 的指针来结束,array+1
释放它剩下的 4 个字节。我玩过free()
,malloc()
但它没有用......我知道 realloc 也可能导致 memcpy 调用,但不是每次!所以它可以更快,不是吗?
c - realloc 会覆盖旧内容吗?
当我们通过 重新分配内存时realloc()
,之前的内容会被覆盖吗?我正在尝试制作一个程序,每次我们将数据输入到其中时都会重新分配内存。
请告诉我有关通过 realloc 分配内存的信息,例如它是否依赖于编译器?