【发布时间】:2018-09-01 07:00:07
【问题描述】:
在下面的代码中,我认为最后一个循环会打印四次1 2 3 4,每换行一次。代码打印了四次 1 3 2 1 而不是 1 2 3 4。
- 如果我将
{1, 3, 2, 1}的类型从double更改为int,问题就会消失。 - 如果我将
double line[] = {1, 3, 2, 1}从 if-else 块中取出,问题就会消失。
我只是无法理解变量double line[] 的初始化如何影响vector <double *> v 的赋值。
#include <iostream>
#include <cmath>
#include <vector>
int main()
{
std::vector <double*> v;
for(int i = 0; i < 4; i++)
{
double line[] = {1, 2, 3, 4};
v.push_back(new double[4]);
v[std::abs(v.size()) - 1] = line;
}
if(0 > 1)
{
}
else
{
double line[] = {1, 3, 2, 1};
}
for(int i = 0; i < 4; i++)
{
for(int j = 0; j < 4; j++)
{
std::cout << v[i][j] << ' ';
}
std::cout << '\n';
}
}
【问题讨论】:
-
在输入帖子时出错。对不起。我已经对其进行了编辑以反映正确的代码。
-
double line[] = {1, 3, 2, 1};在该范围内声明了一个新变量,该变量不以任何方式连接到具有相同名称的另一个变量,然后该范围结束,该变量也是如此。您的第一个循环所做的只是造成内存泄漏。 -
你的第一个
line在每次迭代后都会被销毁,因此v[x]是一个悬空指针,会产生未定义的行为