【发布时间】:2015-02-10 01:42:30
【问题描述】:
您好,我是 C++ 新手,我需要动态分配二维数组。没有错误,但在运行时,当我设置订单和第一行时,我得到一个运行时错误:“Segmentation Fault”......这是代码:
#include <iostream>
using namespace std;
double ** allocateDynamicArray(int &order){
double ** arr = new double *[order];
for(int i = 0;i < order; i++){
*arr = new double[order+1];
}
return arr;
}
void deallocateDynamicArray(double **arr, int order){
for(int i=0; i<order; i++){
delete [] arr[i];
}
delete [] arr;
}
void addAndPrintArray(double **arr, int order){
cout << "Zadejte prvky pole radu " << order << endl;
for(int i=0; i< order; i++){
for(int j=0; j< order+1; j++){
cout << "Pole[" << i << "][" << j << "]: ";
cin >> arr[i][j];
}
}
for(int i=0; i< order; i++){
for(int j=0; j< order+1; j++){
cout << arr[i][j] << " ";
if(arr[i][j] < 10 && arr[i][j] > -10){
cout << " ";
}
cout << endl;
}
}
}
int main()
{
int order;
cin >> order;
double **dynArray = allocateDynamicArray(order);
addAndPrintArray(dynArray, order);
deallocateDynamicArray(dynArray, order);
return 0;
}
【问题讨论】:
-
使用
vector<vector<double>>几乎肯定会更好。使用起来不那么复杂,因为没有分配/释放问题。 -
*arr =应该是arr[i] = -
是的,但如果我想使用它怎么办?我只需要知道这段代码有什么不好...
-
不应该使用它的一个原因是没有检查 new[] 是否在该循环中的任何地方失败。如果失败,则由于
new[]抛出异常而导致内存泄漏。 -
好的,所以我只需要使用这个:
arr[i]还是总是使用向量?
标签: c++ arrays dynamic multidimensional-array allocation