【发布时间】:2014-09-12 22:29:07
【问题描述】:
我是一个与指针和动态数组分配搏斗的新手程序员。
对于我正在处理的程序,我需要使用用户输入为每个索引处的维度和值分配一个二维。
我后来使用 delete[] 取消分配数组并得到堆损坏错误。
这是我的分配:
cin>>w>>h;
int** pond;
//allocating array
pond = new int*[w];
for(int j = 0; j<w; j++)
{
pond[j] = new int[h];
}
// inputting array values
for(int k = 0; k < h; k++)
{
for(int l = 0; l < w; l++)
{
cin>>entry;
pond[l][w] = entry;
cout<<"entry is: "<< pond[l][w]<<endl;
}
}
cout<<pond[0][0]<<endl;
最后的 cout 语句是尝试验证数组中的一个值。问题是,它给出了类似于 -8023940... 的随机数,它甚至不接近用户输入,它是简单的整数 (1-9)。但是,for 循环中的 cout 语句会产生正确的值。
我的问题是,我在这里做错了什么?分配看起来很简单,但是一旦退出 for 循环,值就会很疯狂。
这是我的整个程序:
#include <iostream>
#include <string>
using namespace std;
int main()
{
int trials = 0;
int w = 0;
int h = 0;
int entry = 0;
int fishMax = 0;
int holdFishRow = 0;
int holdFishCol = 0;
int fishTotal = 0;
int highRow = 0;
int highCol = 0;
char done = 's';
cin>>trials;
for(int i = 0; i < trials; i++)
{
cin>>w>>h;
int** pond;
//allocating array
pond = new int*[w];
for(int j = 0; j<w; j++)
{
pond[j] = new int[h];
}
// inputting array values
for(int k = 0; k < h; k++)
{
for(int l = 0; l < w; l++)
{
cin>>entry;
pond[l][w] = entry;
cout<<"entry is: "<< pond[l][w]<<endl;
}
}
cout<<pond[0][0]<<endl;
// "fishing"...bombing each array index bomberman style.
for(int z = 0; z < h; z++)
{
for(int j = 0; j < w; j++)
{
for(int k = 0; k < h; k++)
{
holdFishCol = holdFishCol + pond[j][k];
cout<<pond[j][k]<<endl;
}
for(int l = 0; l < w; l++)
{
holdFishRow += pond[l][z];
}
fishTotal = holdFishCol + holdFishRow;
if(fishTotal > fishMax)
{
fishMax = fishTotal;
highRow = j;
highCol = z;
}
}
}
cout<< "#"<<i<<": ("<<highRow<<", "<<highCol<<") "<<fishMax<<endl;
for(int q = 0; q < w; q++)
{
delete[] pond[q];
}
delete[] pond;
}
cin>>done;
return 0;
}
它遍历每个给定的数组,并以交叉模式(如加号+)添加每个索引的值,总计,并为每个索引给出分数。
【问题讨论】:
-
w分配数组时为0。 -
pond[l][w]=entry;?这很糟糕。 -
我想到了,但是每次我测试程序时,我都会提供 w 和 h 的值 3,以创建一个简单的 3x3 数组。但是,我将添加一些代码来防止这种情况发生。谢谢。
-
@Deduplicator 以什么方式?有人告诉我,我可以通过这种方式提供值。不想争论,但有什么更好的方法?
-
我的意思是那条线不好。尺寸为
w和h,但l和w的最大值为w-1w。看到问题了吗?
标签: c++ pointers memory-management dynamic-arrays