在C++中使用具有多维数组的memset
Using memset with multidimensional arrays in C++
我正在尝试使用memset
来设置大小为rownum x rownmum
的动态数组。但是,当我调用如下所示的showarr
函数时,我得到的不是全零的输出(即ASCII 48
),而是随机/垃圾值。
void showarr(int **a, int rownum)
{
for ( int i = 0; i < rownum; i++) {
for ( int j = 0; j < rownum; j++) {
cout<<a[i][j]<<endl;
}
}
}
int main(int argc, char *argv[])
{
int n;
cin>>n;
int rownum;
cin>>rownum;
int **a = new int* [rownum] ;
for ( int i = 0; i <rownum; i++) {
a[i] = new int[rownum];
}
for (int i = 0; i < rownum; i++) {
memset(a[i],48,sizeof(a[i]));
}
showarr(a,rownum);
return 0;
}
sizeof(a[i]) == sizeof(int *)
;CCD_ 6运算符不能用于获得动态分配的数组的长度。进行
memset(a[i], '0', sizeof(a[i][0]) * rownum);
相反。
(请不要在代码中使用ASCII值作为幻数。)
请参阅larsmans对问题的回答。这很容易被矢量(没有内存泄漏的机会)取代(未编译/测试):
#include <vector>
#include <iostream>
typedef std::vector<int> vector1D;
typedef std::vector<vector1D> vector2D;
void showarr(const vector2D& v)
{
for (vector2D::iterator it1 = v.begin(); it1 != v.end(); ++it1) {
for (vector1D::iterator it2 = it1.begin(); it2 != it1.end(); ++it2) {
cout<<*it2<<endl;
}
}
}
int main()
{
int rownum;
cin>>rownum;
vector2D a();
for (int i = 0; i <rownum; i++) {
a.push_back(vector1D(rownum, '0'));
}
showarr(a);
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 使用 memset 填充数组会显示垃圾
- 使用memset初始化int数组
- 使用memset初始化后,访问违反写作错误写入2D数组
- 可以使用 memset 来填充 std::complex<float>s 数组吗?
- 在双精度类型数组中使用 memset()
- memset 将 -1 放入我的数组中,而不是我指定的值,这是怎么回事
- 清除一个字符数组的最佳方案-是否为memset
- 使用memset将字符串数组设置为0后,该数组不可用
- 在C++中使用具有多维数组的memset
- c++中使用memset初始化具有不同值的struct数组元素
- 通过memset函数设置2D int数组元素为1
- 在c++中正确使用memset和memcpy初始化字符数组
- 为什么memset在2d数组中正确填充0,但在该数组中无法填充1 ?
- 如何使用memset初始化动态二维数组
- memset如何以-1初始化整数数组
- 静态数组上的Memset
- 为什么memset不能在c++11中使用数组容器