问题标签 [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 投票
2 回答
1587 浏览

c - Calloc 导致段错误但不是 malloc

我正在实现一个环形缓冲区,在一种方法中,我CHUNKSIZE从一个循环中的文件中读取字节并将指针插入到环形缓冲区中。

我在一个while循环中这样做。该代码可以正常工作,malloccalloc会在循环结束时导致段错误。这真的很神秘。

这是代码:

0 投票
1 回答
622 浏览

c - fwrite 仅写入第一个元素并删除所有以下元素

这是我在这个网站上的第一个问题。

我一直在为我的大学作业制作一个 C 程序。游戏而已。我使用 calloc 为结构数组动态分配内存。然后我从一个文件中读取(它已经具有由 fwrite 写入的相同结构)并将信息存储在我从 calloc 创建的这些结构中。然后我处理信息并写回文件。我面临的问题是,当我使用“wb”覆盖同一个文件并使用 fwrite 写回处理过的结构时,它只写入数组的第一个结构,而其他结构则不会被写入并从内存中丢失。我敢肯定,在使用 fwrite 之前,内存中的所有信息都是完整的。所以,我在处理过程中没有做错任何事情。但是 fwrite 只写第一个结构。任何帮助将不胜感激。这是代码的一部分:

0 投票
2 回答
1574 浏览

macos - 可以使用 calloc 或 malloc 在 OSX 中仅分配物理内存吗?

我正在玩 c 函数 malloc 和 calloc ,我有一些问题。

我想看看我是否可以使用这两个函数只分配物理内存,我的 mac 有 4gb 或 ram,当我使用 malloc 时,我可以分配超过 4gb 的内存,这意味着 malloc 分配物理内存和虚拟内存。

我有一些问题:

  1. 有什么我可以使用的功能,所以我只能分配物理内存(不分配虚拟内存)

  2. 当调用 malloc 和 calloc 以及指针返回时,有什么方法可以使用指针来确定分配了多少物理内存和分配了多少虚拟内存?

一个简单的例子将不胜感激:)

感谢您的帮助 :)

0 投票
1 回答
552 浏览

c - 从字符串复制到分配的内存的函数中的运行时错误

我对以下 C 难题有一些想法。我很好奇有更多经验的 C 程序员可能会怎么想……看看示例代码:

上面建议的 strdup() 实现包含一个运行时错误,该错误可能与每次调用都不一致。以下哪一项准确地描述了这个错误?

对此的可能答案是:

1 calloc() 的参数不会导致分配足够的内存来存储 s 的内容。

2 如果内存不足,calloc() 可能会失败并返回 NULL。代码没有预料到这种情况。

3 memcpy() 如果用于复制 ASCII 字符串,可能会损坏数据。

4 buf 永远不会以 NUL 结尾,因此不能被影响字符串的 C 库函数使用。

5 函数返回一个指向动态内存的指针。应该避免这种做法,并且总是会造成内存泄漏。

我认为正确答案是 2,但这更多是因为其他答案对我来说似乎不正确,而不是因为答案 2 是直接正确的答案。

  • 答案 1 似乎不正确,因为 calloc 保留了足够的内存 (len+1) 来适当地结束字符串,

  • 我对答案 3 中的内容一无所知,

  • answer4:memcpy 将 s 的内容复制到 buf 留下最后一个字节等于 0(复制 len 个字节,注意 previos 调用 calloc 用 0 填充最后一个字节)。因此,这个答案是不正确的,

  • 答案5:?

你怎么看?提前致谢...

0 投票
1 回答
445 浏览

c - 重新分配三重指针

嗨,我有一个三重指针,当我的原始数组被填满时,我想重新分配它。出于某种原因,我使用 realloc 的方式给了我一个段错误。有人知道为什么吗?

下一部分发生在循环内:

谢谢

0 投票
1 回答
538 浏览

objective-c - NSPointerArray 中的二维数组

我正在创建许多 2D int 和 float C 数组,并将它们的指针分配给 NSPointerArray。当我创建并用数据填充它们时一切都很好,但是当我在数组上添加指针时,我得到 EXEC_BAD_ACCESS。Q1-为什么这是错误的?Q2-提供对使用 calloc 创建的许多 2D 数组的访问的最佳方法是什么?

以供参考

}

0 投票
1 回答
1920 浏览

c - C 内存错误

我必须将数字表示为字符串并对它们执行加法运算。这是家庭作业,到目前为止我所做的工作。它输出正确的输出,但我的程序也需要没有内存错误,当然不是这样。

有人可以就这些未初始化变量的情况提供任何帮助都会有所帮助。我认为这是使用 malloc 而不是 calloc,但我也改变了它,仍然没有骰子。

这是我的输出:

这是我的代码:/* * 文件:strmath.c */

这是我的 valgrind 输出(valgrind 的完整输出位于 http://textsnip.com/ae3c9a,因为它对 SO 来说太多了):

固定的:

和 valgrind 输出:

0 投票
1 回答
558 浏览

arrays - 如何释放无符号指针数组及其元素(calloc)

释放用 cmallc 分配的无符号指针数组的最佳方法是什么?

我确实喜欢这样,但我知道这不太正确,因为我收到了编译警告:

警告:传递 'free' 的参数 1 使指针从整数而不进行强制转换

这是 cs_calloc 代码:

我的问题是 1. 我释放的方式,buf,我的意思是首先释放循环中的每个数组元素(free (buf[i]) 是否正确?我需要释放数组的元素,并将数组释放为多于

  1. 为什么我会收到编译警告,如果它是错误的,有人可以纠正我释放分配内存的方式(请给我写代码应该如何纠正?

提前致谢

0 投票
2 回答
533 浏览

c - c - 连续的 calloc 调用破坏了一些内存

代码看起来像:

注意: 上述代码中,dlcalloc指的是Doug Lea 的malloc.c中定义的代码。


calloc里面之前func2()

gPtr= "C:\Program Files\Test\Path.txt"

calloc进去之后func2()

gPtr= "C:\Program Files\Test\Path.txt♂"


我的问题是,连续dlcalloc()调用是否有可能破坏其他变量的内存?上面的代码是我正在研究的大型代码库的一部分的概括。

0 投票
2 回答
397 浏览

c - 在 C 中使用 fread() 分配内存和读取数组的大多数可移植方式

只是想知道fread()从 C 中的文件分配内存和数组数据的最合理方法是什么。

首先,一个解释:

现在,当在 longBuffer 中进行 freading 时,代码可以如下所示:

在这两者中,我会说版本 1 更安全,因为如果类型发生longBuffer变化(比如说 to int16_t),人们不必担心忘记用新类型更新fread()'s 。sizeof()

现在,对于一个数据数组,代码可以写成:

然而,这展示了第一个示例中暴露的问题:人们必须担心sizeof(<type>)在更改类型时不会忘记同步指令charpBuffer(比方说,从int8_t*to int16_t*)。

所以,有人可能会尝试写:

作为一个更安全的版本。这应该有效,因为在第 2 行分配之后,写入charpBuffer[0]是完全有效的。

此外,还可以写:

但是,尝试对内存分配做同样的事情,例如:

虽然语法更好,但表现出未定义的行为,因为在这个阶段,将charpBuffer[0]结果写入取消引用 NULL 指针。另外,写作:

表现出同样的问题。

所以,现在的问题:

  1. 代码行“line 2b”和“line 3b”是否正确(忽略此问题的未定义行为)或者我错过了一些技巧,例如“line 2a/3a”和“line 2” /3”?

  2. 编写“清单 1”代码但避免任何形式的未定义行为的最安全的方式是什么?

编辑(为了澄清某些方面):

讨论的方向错了。编译时间与运行时间的问题是一回事(我也想对此有一个标准的保证,但这不是主题)。sizeof(NULL dereferencing) 的未定义行为问题是另一个问题。即使在编译时,我也不相信标准保证不会导致 UB。该标准是否提供任何保证?