问题标签 [calloc]

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.

0 投票
5 回答
10905 浏览

c - 没有 malloc 或 calloc 的 free() 函数

快速提问

您可以使用 free() 函数而不必事先调用 malloc 吗?

艾。

我没有得到任何编译错误,但这是否有效或完全正确?

谢谢,

0 投票
5 回答
81848 浏览

c - 我对 C 上的 malloc() 和 calloc() 感到非常困惑

我一直用 Java 编程,这可能就是我对此感到如此困惑的原因:

在 Java 中,我声明了一个指针:

并初始化它或为其分配一些内存:

现在,在 C 语言中,一切都变得如此混乱。起初我认为这就像声明它一样简单:

并对其进行初始化或为其分配一些内存:

除非我错了,否则以上所有内容都是等效的 Java-C,对吗?

然后,今天我遇到了一个代码,其中我发现了以下内容:

和下面的一些行,没有任何初始化......

令人惊讶的是(至少对我来说),代码有效!至少在 Java 中,这会返回一个不错的“NullPointerException”!

所以,按顺序:

  1. 我对所有 Java-C“翻译”都正确吗?

  2. 为什么该代码有效?

  3. malloc(n*sizeof(int))使用和有什么区别calloc(n,sizeof(int))吗?

提前致谢

0 投票
3 回答
6414 浏览

c - 更喜欢 malloc 而不是 calloc

可能重复:
c malloc 和 calloc 之间的区别

在任何情况下,您更喜欢 malloc 而不是 calloc。我知道 malloc 和 calloc 都动态分配内存,并且 calloc 还将分配的内存中的所有位初始化为零。由此我猜想使用calloc而不是malloc总是更好。还是在某些情况下 malloc 更好?性能可能是?

0 投票
7 回答
1932 浏览

c - malloc 和 calloc 的用途区别

为了更好地理解 malloc 和 calloc,我编写了这个源代码。

我明白,但只是有几个问题。

等于这个calloc。我不关心清除内存。

与在 while 循环中执行 5 次相比,这到底是什么:

我猜第一个和第二个是创建一个指向 5 struct device 的指针。第三个是创建一个指向结构设备的指针?

我的程序说明了使用 valgrind --leak-check=full 编译和运行的这 3 种不同的方法。

非常感谢您的任何建议。

0 投票
1 回答
828 浏览

memory - 64位Linux中非常大的内存分配

我正在尝试在 centos 64 位 linux 上分配一块非常大的内存(> 2.5gb)。硬件拥有超过 16GB 的物理内存。但是,当我使用 malloc 或 calloc 时,它们返回 null。该代码在 root 帐户中运行,据我使用 ulimit 检查,内存分配没有限制。可能是什么问题?

谢谢。

米特

0 投票
4 回答
3718 浏览

c - 传递给 free() 的指针是否必须指向内存块的开头,还是可以指向内部?

问题在标题中......我搜索但找不到任何东西。


编辑:

我真的认为没有必要解释这一点,但是因为人们认为我所说的没有意义(而且我问错了问题),所以问题就在这里:

由于人们似乎对所有问题的“根本”原因非常感兴趣,而不是对所提出的实际问题感兴趣(因为这显然有助于更好地解决问题,让我们看看是否有效),问题就在这里:

我正在尝试创建一个基于 NTDLL.dll 的 D 运行时库,以便我可以将该库用于 Win32 子系统以外的子系统。所以这迫使我只链接 NTDLL.dll。

是的,我知道这些功能是“未记录的”并且可能随时更改(即使我打赌一百美元,从现在起 20 年后wcstombs仍然会做同样事情,如果它仍然存在的话)。是的,我知道人们(尤其是微软)不喜欢链接到那个库的开发人员,我可能会因为这里而受到批评。是的,以上两点意味着在 Win32 子系统之前运行的 chkdsk 和碎片整理程序等程序甚至不应该首先创建,因为实际上不可能与 kernel32.dll 或 msvcrt.dll 之类的任何东西链接,并且仍然有 NT-native 可执行文件,所以我们开发人员应该假装这些阶段是我们永远无法企及的。

但是,我怀疑这里的任何人都希望我粘贴几千行代码并帮助我查看它们并试图弄清楚为什么没有失败的内存分配被我正在修改的源代码拒绝。所以这就是为什么我问了一个与“根本”原因不同的问题,尽管这被认为是社区的最佳实践。

如果事情仍然没有意义,请随时在下面发表评论!:)


编辑2:

经过大约 8 个小时的调试,我终于找到了问题所在:

事实证明,如果给它的指针是,RtlReAllocateHeap()不会自动工作。RtlAllocateHeap()NULL

0 投票
2 回答
272 浏览

c - 如果我说 calloc(1000, 23),那么 23 是否“四舍五入”为 24?还是到32?

我想知道,大多数实现是否也calloc将大小视为对齐,并将其四舍五入到下一个支持的粒度?

如果是这样,那么它们是四舍五入到 2 的下一个幂,还是四舍五入到 8 或 16 的下一个倍数?

如果calloc保持参数相同,那么它是如何工作的呢?你的数据不会不对齐吗?

谢谢!

0 投票
2 回答
807 浏览

c - 使用 calloc 后的 C 访问冲突

注意:C 是 Microsoft C 编译器。

我在使用以下代码时遇到问题。

这是在一个单独的 C 文件中。在我决定将事物分开以使它们更易于维护之前,我没有遇到这个问题,我想我只是有点混淆了指针。

calloc 工作正常。

在循环的第一次迭代中,roomIndex 的元素零被正确设置。

然而,循环中的第二个元素(元素 1)总是在运行时导致访问冲突。

我稍后在我的代码中也使用 2d 数组遇到了这个问题,但我认为这是完全相同的问题,这只是最简单的情况。

谁能帮我理解为什么除了第一个元素之外似乎不可能设置任何东西?

0 投票
2 回答
10142 浏览

c - 如何在 C 中使用 calloc()?

如果我的字符串在这个程序中超过 9 个字符,我不应该得到一个错误吗?

谢谢

布拉格曼

0 投票
2 回答
1996 浏览

c - 在 C 中初始化数据结构以管理内存池

我正在为一个库编写一个简单的函数,它将接受我的其他函数管理的内存大小作为参数。

我有一个数据结构,它保存了用户初始化的这个大内存池的信息。

我也有这个功能,我想弄清楚如何初始化这个数据结构以及分配足够的空间来最初管理?

请帮忙