用静态分配替换动态分配
Replace dynamic allocation with a static one
我有一个项目,我必须定义一个不同维度的数组(例如三角形(,因为不允许我使用std :: vector :: vector或其他容器类。为此,我正在使用一系列指针。通常,我会这样做:
int* triangle[n];
for(int i = 0; i < n; i++) {
triangle[i] = new int[i + 1];
for(int j = 0; j <= i; j++) cin >> triangle[i][j];
}
但是我不得使用动态内存!我以为做
int* triangle[n];
for(int i = 0; i < n; i++) {
int row[i + 1];
triangle[i] = row;
for(int j = 0; j <= i; j++) cin >> triangle[i][j];
}
会解决问题。但事实并非如此。取而代之的是,当我迭代阵列并打印内容时,我会得到垃圾。那么,如何用静态分配替换动态分配?
因此,如果您要简化"数组"数组,您的选择是阵列线性化。这意味着,您应该声明70个元素的单个数组,而不是7个10个项目的7个数组。然后,只需通过一个函数更改嵌套索引,该函数可以计算出线性化数组的变化,而Viola!
在这里您可以找到这样一个示例:如何将矩阵的索引映射到1维数组(C (?
如果您不知道您的数组多长时间,那么确定初步预订尺寸可能是一个艰难的选择(例如,诸如向量的STL容器等然后将容器生长至自由容量,然后重新分配更大的块,将数据从旧缓冲区移动到新的缓冲区,一次又一次,一次又一次...(
正如@BeyElerStudios在评论中指出的,在for循环的末尾,分配的row
数组分配的内存被释放了。当我试图打印出内容时,我正在将指针释放到这种释放的记忆中,因此我正在垃圾。谢谢!
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 对具有动态分配的内存和析构函数的类对象的引用
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 访问动态分配列表中的元素
- 为什么 std::equal_to会导致动态分配?
- 调用析构函数以释放动态分配的内存
- 动态分配Q_Property变量
- 在 C++ 中搜索动态分配的数组中的出现次数
- 动态分配的聊天数组打印缺失的数据和空
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 使用动态分配将 char* 复制到另一个字符**
- 使用指针在存在特征库的情况下动态分配 c++ 中的矩阵
- 二维阵列的动态分配
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 在运行时为动态分配的内存输入值
- 释放动态分配的内存时是否需要执行此额外步骤
- 用静态分配替换动态分配