【发布时间】:2014-06-13 21:07:43
【问题描述】:
void allocateTriangle(int ** & twoDArray, int numRows);
void printTriangle(int ** twoDArray, int numRows);
void growToSquare(int ** & twoDArray, int numRows);
void printSquare(int ** & twoDArray, int numRows);
using namespace std;
int main(int argc, char ** argv){
srand((unsigned int)time(NULL));
int ** twoDArray;
int numRows = 10;
allocateTriangle(twoDArray, numRows);
cout << "******* Triangle array *******" << endl;
printTriangle(twoDArray, numRows);
growToSquare(twoDArray, numRows);
cout << "******* Sqaure array *******" << endl;
printSquare(twoDArray, numRows);
return 0;
}
void allocateTriangle(int ** & twoDArray, int numRows) {
twoDArray = new int*[numRows];
for (int x = 0; x < numRows; x++){
twoDArray[x] = new int[x];
for (int y = 0; y <= x; y++){
twoDArray[x][y] = rand() % 100;
}
}
}
void printTriangle(int ** twoDArray, int numRows){
for (int x = 0; x < numRows; x++){
for (int y = 0; y <= x; y++){
cout << setw(5);
cout << twoDArray[x][y];
}
cout << endl;
}
}
void growToSquare(int ** & twoDArray, int numRows) {
for (int x = 0; x < numRows; x++){
int *tempArray = new int[x];
*tempArray = *twoDArray[x];
--> delete [] twoDArray[x];
twoDArray[x] = new int[numRows];
for (int y = 0; y < numRows; y++){
if (y <= x)
twoDArray[x][y] = tempArray[y];
else
twoDArray[x][y] = rand() % 100;
}
}
}
void printSquare(int ** & twoDArray, int numRows){
for (int x = 0; x < numRows; x++){
for (int y = 0; y <= numRows; y++){
cout << setw(5);
if (y <= x)
cout << twoDArray[x][y];
else if (y - 1 == x)
cout << " ";
else
cout << twoDArray[x][y - 1];
}
cout << endl;
}
}
箭头指向这个程序喜欢崩溃的地方。给我一个堆损坏,我在过去的 6 个小时里都在看这个和其他帖子,我什么也没得到。
主要是 growToSquare(),当我尝试通过删除和分配再次“调整”二维数组的大小时,它会在删除时停止。我已经注释掉了其他代码行,看看是否有其他东西在触发,nada。
有什么建议吗? (我使用的是 Visual Studio 2013)
【问题讨论】:
-
a) 你删除[]分配的东西在哪里?
-
向下滚动代码,我在它旁边放了一个箭头。
-
这还不是全部。抱歉听起来很刺耳,但如果您不能正确使用原始指针,请使用 std::vector。使您当前的任务(调整大小等)也更容易解决。
标签: c++ visual-studio multidimensional-array heap-corruption