C++ 中的 memset 函数无法正常工作
memset function in C++ not working properly
我尝试使用 memset
将动态分配的(2D?)数组初始化为所有 i
(i>0
)。但是,当我打印出数组的值时,它正在打印一些垃圾。以下是我的代码片段:
int main() {
int T=1, R=3, C=3;
int **grid = new int*[R], *temp = new int[R*C];
for (int i=0; i<R; i++)
grid[i] = (temp+(C*i));
for (int t=1; t<=T; t++){
memset(temp,1,sizeof(int)*R*C);
cout << t << ":\n";
for (int i=0; i<R; i++){
for (int j=0; j<C; j++)
cout << grid[i][j] << " ";
cout << endl;
}
}
delete [] grid;
delete [] temp;
return 0;
}
下面是输出:
1:
16843009 16843009 16843009
16843009 16843009 16843009
16843009 16843009 16843009
但是,如果我尝试用 0 初始化它,它工作正常并显示:
1:
0 0 0
0 0 0
0 0 0
我对学习 C++ 比较陌生。代码出了什么问题?
memset
写入每个字节而不是数组中的每个 int。
十六进制的值 16843009
是 0x01010101
一个 int,每个 4 个字节设置为 1
。
memset
将对字节进行操作,无法使其对整数进行操作。
我尝试使用 memset
将动态分配的(2D?)数组初始化为所有 i
(i>0
)。但是,当我打印出数组的值时,它正在打印一些垃圾。以下是我的代码片段:
int main() {
int T=1, R=3, C=3;
int **grid = new int*[R], *temp = new int[R*C];
for (int i=0; i<R; i++)
grid[i] = (temp+(C*i));
for (int t=1; t<=T; t++){
memset(temp,1,sizeof(int)*R*C);
cout << t << ":\n";
for (int i=0; i<R; i++){
for (int j=0; j<C; j++)
cout << grid[i][j] << " ";
cout << endl;
}
}
delete [] grid;
delete [] temp;
return 0;
}
下面是输出:
1: 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009 16843009
但是,如果我尝试用 0 初始化它,它工作正常并显示:
1: 0 0 0 0 0 0 0 0 0
我对学习 C++ 比较陌生。代码出了什么问题?
memset
写入每个字节而不是数组中的每个 int。
十六进制的值 16843009
是 0x01010101
一个 int,每个 4 个字节设置为 1
。
memset
将对字节进行操作,无法使其对整数进行操作。