问题标签 [memset]

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 投票
6 回答
6030 浏览

c - 使用 memset 和 memcpy 的问题

所以我正在尝试创建一个内存管理系统。为了做到这一点,我有一定数量的空间(由 malloc 分配),然后我有一个函数 myMalloc,它实际上将返回一个指向已分配空间的指针。由于我们将尝试释放它,因此我们尝试使用 memset 将分配空间的标头设置为分配空间的大小。

然后我们需要能够读取它,以便我们可以看到它的大小。我们试图通过使用 memcpy 并将第一个 sizeof(int) 字节放入变量中来做到这一点。出于测试目的,我们只是尝试执行 memset,然后立即恢复大小。我在下面包含了整个方法,以便您可以查看所有声明。任何帮助将不胜感激!谢谢!

::编辑:: 对不起!运行此程序时,我们在尝试运行 memcpy 行时不断收到段错误。在过去的一个小时左右,我们一直在玩不同的想法,老实说,只是不知道错误发生在哪里。

::Edit2:: 我也将此作为评论发布,但我想我也会把它放在这里,所以更容易找到......

我们的问题是我们有一个允许使用的分配空间,由一个 malloc 调用指定为 128MB。我们只能使用这个,所以我们不能使用 malloc 将大小初始化为任何东西。我想,有没有办法在不初始化大小的情况下做到这一点。如果没有,是否可以在不使用 memcpy 的情况下获取标头设置为的 int。

0 投票
4 回答
7317 浏览

c++ - 在 C++ 中的结构上使用 memset

我正在为我的工作修复旧代码。它目前是用 C++ 编写的。他们将静态分配转换为动态分配,但没有编辑 memset/memcmp/memcpy。这是我的第一次编程实习,我的新手问题如此简单。

以下代码是用 C 编写的,但我想在 C++ 中使用它(我读到 malloc 在 C++ 中不是很好的做法)。我有两个场景:首先,我们创建了 f。然后你使用 &f 来填充零。第二个是指针*pf。我不确定如何将 pf 设置为全 0,就像 C++ 中的前一个示例一样。

你可以做pf = new foo而不是 malloc 然后打电话memset(pf, 0, sizeof(foo))吗?

0 投票
5 回答
19276 浏览

c++ - 在 C++ 中的结构数组上的 memset

我还有另一个 memset 问题。看起来我正在编辑的代码可能有一些问题(或者在不同的文件中没有以相同的方式完成)

第二个示例似乎是正确的,因为rad_array它与数组中的第一个位置相同。那么这sizeof(SecArray))将是有道理的。第一个对我来说似乎不正确。所有结构都只是 BOOL 和 INTS,其中没有任何动态。

我从我关于 memset 的另一篇文章的理解是它遵循这种格式。

memset("pointer to object", "what to set it to", "size of object")

如果我的理论不正确,谁能告诉我这里到底发生了什么。

0 投票
4 回答
328 浏览

c - C奇怪的数组行为

在了解到两者strncmp都不是它看起来的样子并且strlcpy在我的操作系统(Linux)上不可用之后,我想我可以尝试自己编写它。

我找到了 libc 维护者 Ulrich Drepper 的一句话,他发布了strlcpy使用mempcpy. 我也没有mempcpy,但它的行为很容易复制。首先,这是我的测试用例

这是它的结果:

您可以在内部表示(insp()创建的行)中看到混入了一些噪音,例如printf()第一个副本后检查中的格式字符串,以及第二个副本中的外部 0x01。

字符串被原封不动地复制,它可以正确处理太长的源字符串(让我们暂时忽略将 0 作为长度传递的可能问题copy_string,稍后我会修复它)。

但是为什么我的目的地中有外部数组内容(来自格式字符串)?就好像目的地实际上已调整大小以匹配新长度。

0 投票
2 回答
1380 浏览

iphone - 使用 memcpy/memset

在 Obj-C 程序中使用 memset 或 memcpy 时,编译器是否会优化设置 (memset) 或将数据复制 (memcpy) 到 32 位写入中,还是会逐字节优化?

0 投票
7 回答
20648 浏览

c++ - 如何使用没有运行时库的 VC++ 内部函数

我参与了您尝试生成尽可能小的二进制文件的挑战之一,因此我正在构建没有C 或 C++ 运行时库 (RTL) 的程序。我没有链接到 DLL 版本或静态版本。我什至没有#include头文件。我有这个工作正常。

一些 RTL 函数,比如memset(),可能很有用,所以我尝试添加自己的实现。它在 Debug 版本中运行良好(即使对于那些编译器生成隐式调用的地方memset())。但是在发布版本中,我收到一条错误消息,说我无法定义内在函数。您会看到,在 Release 版本中,内部函数已启用,并且memset()是内部函数。

我很想memset()在我的发布版本中使用内在函数,因为它可能是内联的,并且比我的实现更小、更快。但我似乎是第 22 条军规中的一员。如果我不定义memset(),则链接器会抱怨它未定义。如果我定义了它,编译器会抱怨我不能定义一个内在函数。

有谁知道定义、声明、#pragma编译器和链接器标志的正确组合,以在不增加 RTL 开销的情况下获得内在函数?

Visual Studio 2008、x86、Windows XP+。

为了使问题更具体一点:

我这样构建:

如果我使用 的实现进行编译memset(),则会出现编译器错误:

如果我在没有实现的情况下编译它memset(),我会得到一个链接器错误:

0 投票
3 回答
1715 浏览

c - memset(ary,0,length) 是一种在双数组中输入零的可移植方式

可能重复:
更快/首选 memset 或 for 循环将双精度数组清零

以下代码使用 memset 将所有位设置为零

我可以假设这将适用于所有平台吗?

double 数据类型是否始终符合 ieee-754 标准?

感谢您的回复,并感谢 ::fill 模板命令。但我的问题更多的是双数据类型。

也许我应该为纯 c 写我的问题。不过还是谢谢。

编辑:将代码和标签更改为 c

0 投票
7 回答
1376 浏览

c++ - 设置整个数组的值的最简单方法是什么?

我当前的项目要求我根据其他一些值填充一个数组。我知道有捷径:

但在这种情况下,我需要在声明后填充数组。我目前的代码格式如下:

但它不会编译。在我的情况下,有没有办法使用提到的快捷方式?如果没有,最好的修复方法是什么?我很欣赏一种无需显式分配每个元素即可设置它的方法?即:arr[0][0] = ...

0 投票
2 回答
2796 浏览

c - Objective-C 创建的 C 数组的初始值

我创建了一个数组,类似于经典 C (不是 NSArray 或它的一个孩子) - 类似于BOOL i[5];. 我想让它的所有值都等于 NO。

首先,我没有找到有关此类数组初始值的任何信息(我知道在经典 C 中它们将是未定义的,但不确切了解 Objective-C。我找到了有关类及其内部数据的信息 [分配后,没有初始化],但不是简单的数据类型)。

第二,如果我应该手动设置数组值 - 我应该使用memset(...);还是不同的东西?

为了防止可能出现的问题...我想将此构造用作临时布尔标志的数组,并且不认为它被证明在这里使用了类似 NSArray 的东西。

0 投票
2 回答
3256 浏览

c - 尽管有 memset,但“使用未初始化的值”

我分配了一个二维数组并使用 memset 用零填充它。

之后我使用 valgrind [1] 检查内存错误。我收到以下错误:Conditional jump or move depends on uninitialised value(s)对于第 24 行(printf("%i ", array_2d[i][j]);)。我一直认为 memset 是初始化数组的函数。我怎样才能摆脱这个错误?

谢谢!

Valgrind 输出:

[1]valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes --db-attach=yes ./a.out

[gcc-cmd]gcc -std=c99 -lm -Wall -g3 playing_with_valgrind.c