数组中的第一项是......正在替换?

时间:2014-11-08 01:03:15

标签: c++ arrays

新的C ++学习者。

我正在尝试构建一个结构,其成员变量是2动态分配的int数组。 数组由std :: cin填充。

#include <iostream>

struct foo
{
    int* x;
    int* y;
};

// Everything from here goes into the main()

unsigned int numArray;
std::cin >> numArray;

int* m = new int[numArray];
int* n = new int[numArray];

for(int z = 0; z < numArray; z++)
{
     std::cin >> m[z];
}

for(int z = 0; z < numArray; z++)
{
     std::cin >> n[z];
}

foo* bar = new foo;
bar->x = m;
bar->y = n;

delete[] m;
delete[] n;

这应该创建一个名为bar的struct foo,其成员变量为m(int array)和n(int array)。

我的问题从这里开始:

输入:

5            // length of the array
1 2 3 4 5    // for array int* x
6 7 8 9 10   // for array int* y

当我尝试用std :: cout打印结果时,不过......

for(int z = 0; z < 5; z++)
{
     std::cout << (bar->x)[z] << " ";
}
std::cout << std::endl;

for(int z = 0; z < 5; z++)
{
     std::cout << (bar->y)[z] << " ";
}
std::cout << std::endl;

我明白了。

0 2 3 4 5
146890752 7 8 9 10

我的猜测是1.我构建了错误的数组或2.我错误地访问了数组(或者两者都错了?),但我不知道该怎么做。数组x中的第一项似乎总是0,而数组y中的第一项似乎是一些随机大数。发生了什么事?

2 个答案:

答案 0 :(得分:3)

您使用delete[] m; delete[] n;删除了这些数组。然后,其余代码继续访问已删除的内存,从而导致未定义的行为。

也许你误解了bar->x = m;。在该行之后,两个指针bar->xm都指向相同的整数数组。然后你delete[]那个数组,让两个指针指向被删除的数组(从技术上讲,两个指针都是不确定)。

如果删除这些删除语句,那么您的代码应该更好。

NB。如果您还有其他问题,请更新您的帖子以包含您的确切代码,而不是将其描述(例如int main() {而不是&#34;进入主&#34;)。

答案 1 :(得分:0)

通过使用delete[]函数,您“释放”了内存,但它不一定会立即重写数据。删除只是释放它。它重写了第一个,但它只是一个浅的副本,只能通过地址复制。虽然在程序终止之前它可能是不可分配内存的内存泄漏;有时会发生这种情况。