使用指针创建动态数组的问题
Problems with dynamic array creation using pointers
我正在尝试使用int
数组的值作为我的指针来创建一个2D动态数组。我不知道如何准确地将其插入,所以这是代码。也许您会理解我想做的话。
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(){
const int length =5;
int arr[5]={1,1,3,9,1};
int* AR[length];
for (int i=0; i<length;i++) {
for (int j=0; j<(arr[i]); j++){
AR[i] = new int (arr[i]);
AR[i][j]=93;
cout<<"["<<AR[i][j]<<"] ";
}
cout<<endl;
}
for (int i = 0; i < length; i++) {
for (int j=0; j<arr[i]; j++) {
delete[] AR[i];
delete []&AR;
}
}
return 0;
}
每当我使用arr[] < 4
运行它时,它运行完美,但是如果arr
的大小超过4个值,则它会崩溃。你知道为什么吗?
我也遇到了这个问题:
AR[i] = new int[arr[i]]
或
AR[i] = (int *) malloc(sizeof(int) * arr[i])
说明:
int * a = new int(5);
创建一个整数,将其设置为5,然后返回一个指针。
int * a = new int[5];
这将为5个整数分配空间,并将指针返回到第一个。
编辑:还需要调整您的删除
for(int i = 0; i < first_dimension; ++i)
delete [] AR[i];
delete [] AR;
编辑2:正如Wug指出的那样,您也有一个内存泄漏。您的代码现在可以正常工作,但是每个" J"迭代都可以为动态数组分配新的内存基本上失去了对先前分配的动态单维数组的访问。
这是一个超棒的网站,用于学习动态内存分配:
http://www.cplusplus.com/doc/tutorial/dynamic/
您是在内部循环中分配内存而不是外循环,如果您的凹痕保持一致,您会抓住的。另外,您使用的是new int(arr[i])
而不是new int[arr[i]]
(前者分配一个INT并将其值设置为arr[i]
,后者分配了arr[i]
INTS的数组。
在第二个循环中,您反复释放堆栈变量,这是双nono-只有一次免费分配的内存,并且您没有在堆栈上释放变量。
以下清理代码:
for (int i = 0; i < length; i++)
{
// moved outside of inner loop
AR[i] = new int[arr[i]]; // used int[arr[i]] instead of int(arr[i])
for (int j = 0; j < arr[i]; j++)
{
AR[i][j] = 93;
cout << "[" << AR[i][j] << "] ";
}
cout << endl;
}
for (int i = 0; i < length; i++)
{
delete[] AR[i]; // removed incorrect delete statement and incorrect inner loop
}
相关文章:
- 数组C++问题中最大和第二大的数字
- 二维数组问题
- 数组问题:变量周围的堆栈'arr'已损坏
- 无符号字符数组问题
- 数组问题(if (zeds[i].x == zeds[i].x))
- 字符数组问题
- C++中的turbo数组问题
- 输入和输出的2D字符数组问题
- 多维数组问题
- 指针和数组指向数组问题
- 如何随机排列数组问题
- C++ 多维数组问题 - 多次打印条目
- C++ 2D 读入数组问题
- C++读入 2D 数组问题
- 指针和多维数组问题
- C++多项式类,指针数组问题
- 在数组问题(C++)中查找偶数
- 二维std::数组问题
- 向量/数组问题,不能给变量赋索引/不能使用变量作为数组大小(索引)c++
- 指针数组问题