【发布时间】:2021-05-18 08:01:52
【问题描述】:
我有一个用于 char 数组的 List 类。我想将 N 个数组从 'a' 推回 'a..a'。
char* x;
SList list;
for (unsigned int i = 1; i < n+1; i++) {
x = new char[i+1];
for (unsigned int j = 0; j < i; j++) {
x[j] = 'a';
}
x[i] = '\0';
list.push_back(&x);
}
但每次,x 都有相同的地址。结果,我的 List 对象包含 N 个指向同一地址的指针。 有没有办法通过正确的内存分配循环推回这些数组?
在询问之前发现了这个question,但它并没有为我的问题提供一个很酷的解决方案。
【问题讨论】:
-
不用担心,如果您发现拼写错误,您可以随时edit您的问题;)
-
list.push_back(&x);我们猜list的类型是什么?我们不知道SList是什么,除了它不是 来自标准库。无论如何,推送一个自动变量的地址是一种巨大的代码味道,有些东西很远。 -
您存储的是
x的地址,而不是它的值。变量永远不会移动,因此您始终存储相同的地址。 -
请提供minimal reproducible example。理想情况下,不需要输入,例如带有硬编码的初始化。
-
改用
list.push_back(x);(可能适应SList的定义)
标签: c++ pointers memory-management