列表int指针的大小

时间:2013-10-22 19:21:20

标签: c++

我有以下代码:

#include <iostream>

using namespace std;

int main()
{
    int* T = new int;

    T[0] = 1;
    T[1] = 10;
    T[2] = 100;
    T[3] = 1000;
    T[4] = 10000;
    T[5] = 100000;
    T[6] = 1000000;
    T[7] = 10000000;
    T[8] = 100000000;
    T[9] = 1000000000;

    cout << sizeof(T)/sizeof(int) << "<->" << T[3] << endl;

    return 0;
}

结果给我1不正确。如何获得正确数量的元素?

2 个答案:

答案 0 :(得分:4)

int* T = new int;为一个int分配空间。您可以通过intT[0]

访问此*T

T[1]无效,因为您只为一个整数分配了空间。

因此,您已经行使了未定义的行为。

您可以执行int *T = new int[10];,它将为堆上的10个整数分配空间,或int T[10];,它将为堆栈上的10个整数分配空间。

答案 1 :(得分:1)

您将T声明为int *T,因此如果sizeof(T)/sizeof(int)评估为1,则表示int *int都会占用你系统上的字节数相同(假设你没有因为整数除法而截断,当然 - 如果你有一个奇怪的系统sizeof(int*)6,而sizeof(int)是{例如,{1}}这仍然会给你4)。

如果你改变了:

1

为:

int* T = new int;

它会像您期望的那样工作,并且您还可以解决所有非法写入未分配内存的问题。

更改为int T[10]; 会解决您的内存写入问题,但int *T = new int[10];仍会为您评估sizeof(T)/sizeof(int),因为1仍为T,不是阵列。