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