问题标签 [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.
c++ - 使用 memset 初始化指针元素的二维数组
我有这些结构定义
要将数组的指针初始化为 NULL,我可以这样做:
这对我来说不合适。
c++ - 如何使用 memset 将指向内存的指针设置为 NULL?
我有一个结构
我想设置 to 的地址,p_my_t
到目前为止NULL
,这就是我尝试这样做的方式:
不过,这对我来说并不合适。这样做的正确方法是什么?
修改问题 - 提出一个更复杂的问题:
这是我正在尝试做的事情:
- 两个进程,A 和 B
- A、B中的malloc p_my_t有N个线程,可以访问
- 开始在 A 中删除,但我不能简单地释放它,因为 B 中的线程可能仍在使用它。
- 所以我调用了一个函数,将 p_my_t 的地址传递给 B 以在 B 中将其地址设置为 NULL,这样 B 中的其他线程就不能再使用了
- 从 B 回调后,我在 A 中释放内存
注意:没有标准的方法可以通过进程之间的共享内存来管理内存分配。您将不得不对正在发生的事情做一些相当仔细的思考。
c - memset 和 SIGSEGV
我在一段代码中遇到了一个奇怪的问题。
出于某种原因,第一个 memset 调用发送了一个 SIGSEGV。更奇怪的是,在 gdb 内部,同一行执行了大约 30 次,尽管该函数只调用了一次并且内部没有循环!这是一段 gdb 会话。
程序收到信号 SIGSEGV,分段错误。
我还尝试通过 valgrind 的 memcheck 工具运行该程序,但对上述代码没有任何意义。
我正在解析的文件只有一条记录。
任何指针表示赞赏。谢谢。
c++ - C memset 似乎不会写给每个成员
我写了一个小坐标类来处理 int 和 float 坐标。
然后在 main() 我做:
但是根据我的 MSVC 调试器,只有 x 值设置为 0,y 值没有改变。我以前从未在模板类中使用过 sizeof(),这可能是造成问题的原因吗?
c++ - unistd.h read() 正在读取更多数据然后被写入
我正在从命名管道读取/写入数据。在写入方面,它说它正在写入一个恒定的 110 字节。在阅读方面,大部分时间它说它正在读取 110 个字节,这是正确的,但其他时候它说它正在读取 220 个字节或 330 个字节。事实上,当我打印它时,它会在同一个 read() 中连续打印两到三遍相同的消息。在下面的阅读代码中,我是否对 memset 做错了什么来清除字符?我想不出任何其他方式,它读取的内容比写入的内容多,除非缓冲区中剩下一些东西。
c - 在使用前将诸如 sockaddr_in、sockaddr_in6 和 addrinfo 之类的结构清零时,正确的是:memset、初始化程序还是其中之一?
每当我查看书籍、手册页和网站中的真实代码或示例套接字代码时,我几乎总是会看到如下内容:
代替:
或者:
或者:
例如,在将 struct addrinfo 提示传递给 getaddrinfo 之前将其设置为零也是如此。
为什么是这样?据我了解,不使用 memset 的示例可能与使用 memset 的示例相同,如果不是更好的话。我意识到存在差异:
- memset 会将所有位设置为零,这不一定是将每个成员设置为 0 的正确位表示。
- memset 还将填充位设置为零。
将这些结构设置为零时,这些差异中的任何一个是否相关或必需的行为,因此使用初始化程序是错误的?如果是这样,为什么,哪个标准或其他来源验证了这一点?
如果两者都是正确的,为什么 memset/bzero 倾向于出现而不是初始值设定项?只是风格问题吗?如果是这样,那很好,我认为我们不需要主观回答哪种风格更好。
通常的做法是使用初始化程序而不是 memset 正是因为通常不需要所有位为零,而是我们希望类型的正确表示为零。这些与套接字相关的结构是否相反?
在我的研究中,我发现 POSIX 似乎只需要在http://www.opengroup.org/onlinepubs/000095399/basedefs/netinet/in.h.html处将 sockaddr_in6(而不是 sockaddr_in)归零,但没有提及如何它应该归零(memset 或初始化程序?)。我意识到 BSD 套接字早于 POSIX 并且它不是唯一的标准,那么它们对遗留系统或现代非 POSIX 系统的兼容性考虑是什么?
就个人而言,我更喜欢从风格(也许是良好实践)的角度使用初始化程序并完全避免 memset,但我不愿意,因为:
- 其他源代码和半规范文本,如UNIX 网络编程使用 bzero(例如,第 2 版的第 101 页和第 3 版的第 124 页。(我拥有两者))。
- 由于上述原因,我很清楚它们并不相同。
c - 使用 memset 初始化浮点数组
这是我想尝试编写的代码:
我的问题是我想看看是否可以使用 memset 使数组的每个条目成为 0 以外的数字。但是,在单步执行该行之后,数组内容变为一个非常小的数字 (0)。我想知道在这种情况下使用 memset() 函数我做错了什么。我希望这不是重复的帖子,因为在我输入此内容时似乎没有任何建议的相关问题。
c - char 数组与 char 指针
使用recv通过套接字接收数据时,我注意到:
我收到
消息
“mesg”是我发送的,附加了一些随机字符。
如果我使用
相反,我收到
消息
所以没有随机的东西附加到我的字符串中。我发现如果我使用 char[5] 代替它也可以,但我真的不明白为什么。malloc(4) 真的分配了 5 个字节,第五个是 NUL 吗?
c - memset 未填充数组
很简单,为什么我的输出如下?
ps: u32 是 unsigned int 的简单 typedef
编辑:
- 使用 gcc 4.3.4 编译
- 包含 string.h
.net - Windows 放大 API、.NET 和矩阵
我正在尝试使用 Windows Magnification API 在 .net 中创建放大镜应用程序。除了实际设置放大级别(默认为 100%)之外,我几乎已经完成了所有工作。问题是,我在网上的任何地方都找不到任何示例,并且 API 的所有文档都是 C++ 代码。这是我遇到问题的特定功能。
MAGTRANSFORM 结构定义如下:
其中最令人困惑的部分是 memset - 我不确定它在 .NET 中的作用或等效项是什么,但同样令人困惑的是多维数组/矩阵以及我将如何在 .NET 中处理它。
任何帮助将不胜感激。