c++ - 在 C++ 中使用循环进行内存分配
问题描述
我有一个用于 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 个指向同一地址的指针。有没有办法通过正确的内存分配循环推回这些数组?
在询问之前发现了这个问题,但它并没有为我的问题提供一个很酷的解决方案。
解决方案
在循环的每次迭代中,x = new char[i+1];
都会返回一个不同的地址,该地址存储在x
. 因此,每次迭代中的值都会发生x
变化,但地址x
不会。
你的意思
list.push_back(x);
添加新分配内存的地址?当然,这需要您list
更改char *
.
必须提到的是,超出范围&x
后取消引用将导致未定义的行为,因为不再存在。你用悬空指针填充。x
x
list
最后我想提一下,您可以避免讨厌的手动内存管理,而只需使用std::vector<std::string>
.
std::vector<std::string> list;
for (unsigned int i = 1; i < n+1; i++) {
std::string newString(i, 'a'); // string with i times 'a'
list.push_back(newString);
}
推荐阅读
- angular - 我无法在 localhost:8080 上运行我的 Angular 7 PWA
- angular - 如何获取对象内部的对象值
- python - 使用 pandas 从 Python 中的列表/数组中插入列的问题
- javascript - dnndev.me 是什么?(Facebook 上的 React Native Share 链接显示为 dnndev.me)
- android - Retrofit Call.enqueue() 按创建的顺序发送请求?
- javascript - 如何在 nodejs 中使用异步地图系列?
- html - 导航后有一个小间隙
- c++ - 从 3 个向量中删除重复项
- pyspark - 从另一个数据帧中的一个数据帧中找到所有出现的值的最佳方法是什么?
- java - 构建应用程序失败说学习如何修复依赖项解析错误