内存集不起作用
Memset not working
我正在尝试使用以下代码段在纯 2D 数组上使用 memset:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int l[3][3];
memset (l, 1, sizeof(l));
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << l[i][j] << " ";
}
cout << endl;
}
return 0;
}
我希望整个数组使用以下行初始化为 1:
内存集 (l, 1, sizeof(l));
但是我没有得到预期的值,它给了我以下输出:
16843009 16843009 16843009
16843009 16843009 16843009
16843009 16843009 16843009
认为这可能是编译器问题,所以我尝试使用 Ideone:
http://ideone.com/VFYUDg
请帮忙。
memset
处理字节,因此它会用十进制16843009的0x01010101值填充整数数组(假设int为32位)。
如果需要用数字填充二维 C 样式数组:
int l[3][3];
std::fill_n(*l, sizeof l / sizeof **l, 1);
*l
这里衰减int[3][3]
为指向数组第一个元素(int*
)的指针,sizeof l / sizeof **l
产生数组元素的计数。
它使用C++要求,即数组在内存中连续布局,没有间隙,以便多维数组具有与一维数组相同的布局。 例如 int [3][3]
具有与int[3 * 3]
相同的布局。
而且,与memset
不同,std::fill_n
在对象级别操作,而不是在字节级别操作。对于内置类型,优化版本通常作为 SIMD 指令内联,效率不低于 memset
.
实际上
,它工作得很好...
16843009
是0x01010101
(十六进制)的十进制表示形式。
memset
做对了,即它将提供的内存区域中的每个字节初始化为0x01
。
如果您的目标是将数组的每个项目设置为 1,那么以下内容将完成您的工作,
int l[3][3] = {
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- c++ 读取进程内存基址 + 偏移量不起作用
- CUDA我的共享内存代码不起作用,我缺少什么
- 为什么内存集函数不起作用?
- 在声明节点创建链接列表时,为什么静态内存分配不起作用
- 提升shared_ptr和内存分配不起作用
- CUDA 共享内存编程不起作用
- 内存集不起作用
- 对象的 C++ 向量,包含动态分配的内存 - "擦除"不起作用
- 写入进程内存不起作用
- 缩小 std::vector 的大小以适应其实际数据以节省内存使用?vec.swap() 在 MSVC 中不起作用?
- 复制构造函数不起作用并导致内存泄漏
- C++ if 语句不起作用(不会读取内存)
- CUDA:使用具有共享内存的全局线程索引不起作用