C 2 DIM数组新获得0
C++ 2 dim array new got 0?
我已经启用了一个2个昏暗的数组,但是数组的大小得到0:
auto **p = new string*[7];
for (int i = 0; i < 7; ++i) {
p[i] = new string[4];
}
cout << sizeof(p) / sizeof(string)<< endl;
任何人都可以给我一个有关此问题的专业答案:
- 为什么结果输出为0,而大小(p)的结果为8,如果分母和分子不是零的结果,结果怎么可能为0?(如果分母为0,则不是数学。)
- 如何实现新的A 2 DIM数组正确包含字符串?
当您使用new
进行数组分配内存时,它试图分配存储和成功后,将指针返回到数组的初始元素。因为在这里分配的数组腐烂到指针,所以您丢失了有关字节中数组大小的信息,因此您无法将元素数量计算为:
auto numberOfElements = sizeof(array) / sizeof(element);
在您的示例中,sizeof(p)
返回与基于您的体系结构的sizeof(std::string**)
相同。sizeof(string)
可能比sizeof(std::string**)
大,因此,从整数部门获得0
。
在C 中强烈建议使用标准容器而代替手动分配和Deallocation。正如您提到的评论所述,std::vector
是您在示例中应使用的,如下:
vector<vector<string>> p(7, vector<string>(4));
cout << p.size() << endl;
注意:当您为string*[7]
分配内存时,您已经清楚地指定了元素的数量,即7
。
sizeof(p)
是指针的大小,在您的系统中可能是8。
sizeof(string)
是类的大小,大于8。
您打印的结果:
8 / greaterThan8
给您0,因为它是整数部门。如果将其投射到浮动,它不会打印0。
sizeof(string)大于sizeof(p)
对于此类整数部门,结果为0。
例如1/4不是0.25,它是0。
相关文章:
- C++使用另一个数组和新值初始化数组
- 新的整数数组向右移动?
- 如何将元素从向量转移到新数组?
- 如何增加以前由新运算符分配的 C++ std::list 数组的大小?
- 如何检测将文本文件读入 int 数组的新行
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 如何输入数组的元素,每次获得新元素时,我们将其放在数组的中间?
- C++ "oldstyle container ":指针/数组/新 - 可能误会?
- 仅通过C++中数组初始化的不同方法,即可在同一输入上获得两个不同的答案
- 从用户那里获得无限量的输入,而不是打印最大的3个,而不使用数组
- 具有构造函数的新对象数组,需要在C++中设置参数
- 分割故障 - 遇到问题,创建新的数组实例
- C 2 DIM数组新获得0
- 新字符数组不会初始化为全部零
- 将旧指针数组的元素复制到新指针数组中
- C++ 带参数的新类数组
- 指向类对象的新指针数组
- 如何获取新的数组值?C++
- C++ 删除包含新结构数组的新结构数组的正确方法