C++ c++;:我想要2,4,6来显示。。。相反,我认为地址号码正在显示?

C++ c++;:我想要2,4,6来显示。。。相反,我认为地址号码正在显示?,c++,C++,我想要2,4,6来显示。。。相反,我认为地址号码正在显示 我需要做什么来纠正?为什么? 谢谢 (目的…演示更改阵列空间并保持阵列底部的能力) 您正在每个新int处覆盖指针行。而你正从它之前的那个泄露内存 另外,由于您只分配了一个int,因此只定义了行[0]。 访问行[1]和行[2]未定义。请尝试以下操作: int *line; line = new int[3]; line[0] = 2; line[1] = 4; line[2] = 6; printf("%d %d %d", line[

我想要2,4,6来显示。。。相反,我认为地址号码正在显示

我需要做什么来纠正?为什么? 谢谢

(目的…演示更改阵列空间并保持阵列底部的能力)


您正在每个
新int
处覆盖指针
。而你正从它之前的那个泄露内存

另外,由于您只分配了一个int,因此只定义了
行[0]
。 访问
行[1]
行[2]
未定义。

请尝试以下操作:

int *line;

line = new int[3];
line[0] = 2;
line[1] = 4;
line[2] = 6;
printf("%d  %d  %d", line[0], line[1], line[2]);
delete[] line;
注意事项:

line = new int[3]; // here you are supposed to specify the size of your new array
...
delete[] line; // whenever you use new sometype[somevalue]; 
               // you must call delete[] later on to free the allocated resources.
另外,请看下面的问题:


line=new int
用一个新分配的
int
大小的堆栈块替换
line
指向的东西,您声明一个
int*
,并用
new
分配一个
int
。此时,
包含一个指向
int
的地址

访问
行[1]
行[2]
是等待发生的崩溃,因为这些位置包含垃圾。你从来没有在这些地方分配过内存。

跟我说:“这不是Java。没有充分的理由,我不会使用
new
。”

对于三个整数的数组,您只需要以下内容:

int line[] = {2, 4, 6};
要打印它们,通常需要使用
std::cout
而不是
printf

std::cout << line[0] << " " << line[1] << " " << line[2];

std::cout-Well你肯定会把那堆东西砸得很好。。更不用说试图显示三个数字的四个内存泄漏了……如果您想“更改阵列空间并保留基址”(我想您指的是“初始段”),则无法将旧阵列复制到新分配的区域。顺便说一下,有一个名为
std::vector
的类正是为您这样做的;-)让我猜猜,你有java或c的背景吗?
std::cout << line[0] << " " << line[1] << " " << line[2];