考虑一个例子:
void main()
{
int *arr;
arr=new int[10];
}
我怎么知道arr的大小?
答案 0 :(得分:20)
你必须自己跟踪它。我建议使用vector或deque来让自己的生活更轻松。
答案 1 :(得分:7)
两种方式(请注意,在第一个arr是ptr而不是int):
int main()
{
const int SIZE = 10;
int* arr;
arr = new int[SIZE];
delete[] arr;
}
或更好:
int main()
{
std::vector<int> arr( 10 );
std::size_t size = arr.size();
}
答案 2 :(得分:0)
数组的大小为10。
答案 3 :(得分:0)
在契约中,您可以使用一些静态类方法重载新的和跟踪分配大小。 尝试检查LeakTracer等工具。
虽然LeakTracer不是那么正确的实现工具,它提供了几乎所有你需要的东西,甚至超出了它。你只需要添加静态方法来通过指针获取分配大小(不是很难实现它,只需修改'delete'处理程序)。
答案 4 :(得分:0)
你可以使用sizeof并除以数组存储的大小来获得项目数量吗?类似的东西
Stroustrupp会告诉您使用容器,以便在访问时不会出现泄漏或缓冲区溢出。
答案 5 :(得分:-4)
为清晰起见编辑:第一部分是编辑器改变原始代码的原因
int arr;
到
int* arr;
~~~~~
宣布
时int arr;
你正在做一个int。然后它将指向您刚刚创建的新数组。但是arr的大小仍然是size_of(int)
~~~~~
我猜这不是你问的问题。你问你怎么知道阵列的大小?你必须自己跟踪它。
#define ARR_SIZE 10
void main()
{
int * arr;
arr = new int[ARR_SIZE];
}
但正如弗雷德所说,使用跟踪你的其他东西最有可能更好。