C++:使用动态内存创建一个动态数组
C++: creating a dynamic array using dynamic memory
我正试图创建一个动态数组,或者你应该用指针来调用它,但当我在设置元素后尝试定制数组的长度时,它给了我0。我不确定我在这里做错了什么。
这是代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int *p = NULL;
int kek = 0;
cin >> kek;
p = new int[kek];
for (int i = 0; i < kek; i++)
{
p[i] = 0;
}
int sizeOfArray = sizeof(p) / 8;
cout << sizeOfArray << endl;
delete[] p;
}
最好使用stl向量,这有size()方法
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> p;
int kek = 0;
cin >> kek;
p.resize(kek);
for (int i = 0; i < kek; i++)
{
p[i] = 0;
}
int sizeOfArray = p.size();
cout << sizeOfArray << endl;
p.clear();
return 0;
}
您只需要获取指针的大小。
但只需使用std::vector
不能使用sizeof()
来确定动态分配数组的大小,因为在编译时无法确定大小,因此不会存储在任何位置。
当你有一个静态分配的数组时,比如:
int numbers[40];
编译器能够计算出称为numbers
的内存块的大小是40项*8个字节每个=320个字节,并确定像sizeof(numbers)
这样的语句等价于320,并进行适当的替换。
但当你有类似的东西时
int *numbers = new int[n];
numbers
被明确定义为指向某些内存的指针,当你执行sizeof(numbers)
时,它会尝试评估指针的大小,根据你所在的编译器和平台,指针的大小将是4或8个字节同样,
numbers
是一个指针,指向内存块中的第一个项目。没有简单的方法来判断它指向计算机中的哪一个内存块,以及这个块有多大(以字节为单位)
这意味着您必须自己跟踪数组的大小。
您已经有了变量kek
,所以以字节为单位的大小应该是kek * sizeof(int)
或者像其他人说的那样,你也可以使用向量来跟踪长度:
vector<int> numbers;
int sizeInBytes = numbers.size() * sizeof(int);
无法根据new[]
返回的指针来确定C++中new[]
ed数组的长度。所以,你试图"定制长度"并不能真正做到这一点。sizeof
不会这么做,也不会帮你。
"定制"new[]
ed数组大小的唯一方法是记住该大小,然后手动将其从分配数组的点携带到需要"定制"大小的点。如果你在这个过程中不知何故失去了对这个大小的了解,你将永远无法恢复它
在您的情况下,尺寸为kek
。这就是你所说的。
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 输出没有重复元素的动态数组(收缩数组)C++
- 正在插入动态数组
- 如何在动态数组上使用搜索函数
- C++ 动态数组每次添加时将大小增加 1 - 错误
- 静态数组的自由动态数组
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 为什么 c++ 动态数组的大小没有改变?
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 指针的 C++ 动态数组 - 何时需要使用它?
- 删除动态数组时未定义标识符
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 动态数组的 C++ 重载加运算符
- 基于数组的列表 - 动态数组创建时出错