C++ 循环结束后重新分配向量中的前半个指针

C++ 循环结束后重新分配向量中的前半个指针,c++,pointers,vector,C++,Pointers,Vector,所以,我正在构建一个电路设计算法,在我的一门课程中只能使用可逆门,我在设置我的课程时遇到了一个巨大的问题。基本上,我想首先将30个输入门链接到各自的输出门(一对一)。我不知道为什么,但在循环在构造函数中结束后,我的一个向量的前半部分的值神奇地改变了(输入[I].output)。我提供了cout语句的控制台输出,突出显示了正在更改的键值。我不知道为什么会这样;如果您有任何见解,我们将不胜感激。这是错误的: console output: 0 1 200 0 200 0

所以,我正在构建一个电路设计算法,在我的一门课程中只能使用可逆门,我在设置我的课程时遇到了一个巨大的问题。基本上,我想首先将30个输入门链接到各自的输出门(一对一)。我不知道为什么,但在循环在构造函数中结束后,我的一个向量的前半部分的值神奇地改变了(输入[I].output)。我提供了cout语句的控制台输出,突出显示了正在更改的键值。我不知道为什么会这样;如果您有任何见解,我们将不胜感激。

这是错误的:

console output:

0       1
200     0
200     0

1       1
201     0
201     0

2       1
202     0
202     0

3       0
203     0
203     0

4       0
204     0
204     0

5       0
205     0
205     0

6       0
206     0
206     0

7       0
207     0
207     0

8       0
208     0
208     0

9       0
209     0
209     0

10      0
210     0
210     0

11      0
211     0
211     0

12      0
212     0
212     0

13      0
213     0
213     0

14      0
214     0
214     0

15      1
215     0
215     0

16      1
216     0
216     0

17      0
217     0
217     0

18      0
218     0
218     0

19      0
219     0
219     0

20      0
220     0
220     0

21      0
221     0
221     0

22      0
222     0
222     0

23      0
223     0
223     0

24      0
224     0
224     0

25      0
225     0
225     0

26      0
226     0
226     0

27      0
227     0
227     0

28      0
228     0
228     0

29      0
229     0
229     0



140352931229480 0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
216     0  
217     0  
218     0  
219     0  
220     0  
221     0  
222     0  
223     0  
224     0  
225     0  
226     0  
227     0  
228     0  
229     0  
您正在存储指向向量元素的原始指针,稍后向该向量添加新元素(
push_back()
)。这些随后的添加可能会迫使向量增长,此时它必须将所有元素重新定位到新地址,留下悬空的指针

您有几个选择:您可以存储整数索引而不是指针,或者您可以使用
deque
而不是
vector
,或者您可以执行
inputs.reserve(30);产出.储备金(30)在循环之前。

这是错误的:

console output:

0       1
200     0
200     0

1       1
201     0
201     0

2       1
202     0
202     0

3       0
203     0
203     0

4       0
204     0
204     0

5       0
205     0
205     0

6       0
206     0
206     0

7       0
207     0
207     0

8       0
208     0
208     0

9       0
209     0
209     0

10      0
210     0
210     0

11      0
211     0
211     0

12      0
212     0
212     0

13      0
213     0
213     0

14      0
214     0
214     0

15      1
215     0
215     0

16      1
216     0
216     0

17      0
217     0
217     0

18      0
218     0
218     0

19      0
219     0
219     0

20      0
220     0
220     0

21      0
221     0
221     0

22      0
222     0
222     0

23      0
223     0
223     0

24      0
224     0
224     0

25      0
225     0
225     0

26      0
226     0
226     0

27      0
227     0
227     0

28      0
228     0
228     0

29      0
229     0
229     0



140352931229480 0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
0       0  
216     0  
217     0  
218     0  
219     0  
220     0  
221     0  
222     0  
223     0  
224     0  
225     0  
226     0  
227     0  
228     0  
229     0  
您正在存储指向向量元素的原始指针,稍后向该向量添加新元素(
push_back()
)。这些随后的添加可能会迫使向量增长,此时它必须将所有元素重新定位到新地址,留下悬空的指针


您有几个选择:您可以存储整数索引而不是指针,或者您可以使用
deque
而不是
vector
,或者您可以执行
inputs.reserve(30);产出.储备金(30)在循环之前。

非常感谢!我从未发现这是个问题。我正在运行的修复程序是在向量、指针和大量使用“new”关键字中生成所有内容。这样,当重新分配发生时,我的重要记忆保持不变。非常感谢!我从未发现这是个问题。我正在运行的修复程序是在向量、指针和大量使用“new”关键字中生成所有内容。这样,当重新分配发生时,我的重要记忆保持不变。
inputs[i].output = &(outputs[i]);
outputs[i].input = &(inputs[i]);