2016-09-28 21 views
1

我在C++中的類的功能部件本地定義以下變量:本地定義的雙陣列使得程序崩潰

double coeff, mincoeff, minratio, 
      equality[100][5000], 
      tableau[51][5052], 
      x[50][100]; 

當運行程序崩潰。當我註釋掉equality數組的時候它可以工作,但是如果我沒有註釋掉它,它會使程序崩潰。 tableau數組不適用於tableau數組,它始終與'tableau'數組一起工作,並且沒有'equal'數組。我看到一個帖子用malloc()功能來分配空間動態地想:

double *equality; equality = malloc(500000*sizeof(double));

但它沒有給我轉換從void*double*錯誤。有另一種方法嗎?

+0

什麼是程序崩潰時出現的錯誤信息?它應該告訴你哪裏出了問題。 – MrEricSir

+3

是的,還有另外一種方法:'std :: vector'。 –

+2

'(100 * 5000 + 51 * 5052 + 50 * 100)* sizeof(double)== bad_times_for_your_stack' – user657267

回答

1

在堆中分配eqaulity,當你用它的可用內存來完成:

int main() 
{ 

    double** equality = new double* [100]; 
    for(int i(0); i < 100; i++) 
     equality[i] = new double[5000]; 

    for(int i = 0; i < 100; i++) 
     delete[] equality[i]; 
    delete[] equality; 

    equality = NULL; 


    std::cout << std::endl; 
    return 0; 
} 
1

像@ user657267所說,你所要求的內存平等連續塊的4MB。這裏要做的最好的事情是動態地詢問內存。

double **equality = new (nothrow) double*[100]; //Or do exception check to make sure you have enough memory 
if (equality!=nullptr) 
{ 
    for(int i(0); i < 100; i++) 
    { 
    equality[i] = new (nothrow) double[5000]; //Again or do exception check to handle exception if it cannot get asked memory. 
    if (equality[i] == nullptr) 
    { 
     //Handle the situation where memory could not be allocated 
     ... 
    } 
    } 
} 
else 
{ 
    //Handle not being able to allocate memory 
} 

關於C風格的malloc(與C++以及作品),你必須強制轉換爲正確的數據類型類似以下內容:

double *equality; 
equality = (double*) malloc(500000*sizeof(double)); 

注意:不要忘記釋放你分配什麼。