gpt4 book ai didi

C++ 2 昏暗数组新得到 0?

转载 作者:行者123 更新时间:2023-11-30 02:23:35 25 4
gpt4 key购买 nike

我新建了一个 2 dim 数组,但是数组的大小变成了 0:

auto **p = new string*[7];
for (int i = 0; i < 7; ++i) {
p[i] = new string[4];
}
cout << sizeof(p) / sizeof(string)<< endl;

任何人都可以就这个问题给我一个专业的答案:

  1. 为什么结果输出是0,而sizeof(p)的结果是8,如果分母和分子不为0怎么可能是0呢? (如果分母为 0 则不是数学。)
  2. 如何实现新的 2 dim 数组正确包含字符串?

最佳答案

当您使用 new 分配内存时对于数组,它尝试分配存储并在成功时返回指向数组初始元素的指针。因为这里分配的数组衰减为指针,所以您丢失了有关数组大小(以字节为单位)的信息,因此您无法计算元素数:

auto numberOfElements = sizeof(array) / sizeof(element);

在您的示例中,sizeof(p) 返回与基于您的体系结构的 sizeof(std::string**) 相同的结果。 sizeof(string) 可能比 sizeof(std::string**) 大,因此从整数除法得到 0

强烈建议使用 Standard containers而是手动分配和释放。正如您在问题下提到的评论,std::vector是您应该在示例中使用的内容,如下所示:

vector<vector<string>> p(7, vector<string>(4));
cout << p.size() << endl;

注意:当你为string*[7]分配内存时,你已经明确指定了元素个数,即7 .

关于C++ 2 昏暗数组新得到 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46070153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com