C 2 DIM数组新获得0

C++ 2 dim array new got 0?

本文关键字:新获得 数组 DIM      更新时间:2023-10-16

我已经启用了一个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;

任何人都可以给我一个有关此问题的专业答案:

  1. 为什么结果输出为0,而大小(p)的结果为8,如果分母和分子不是零的结果,结果怎么可能为0?(如果分母为0,则不是数学。)
  2. 如何实现新的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。