2015-09-04 44 views
-3

我創建二維動態陣列(進制)的特定值動態2D陣列,並且初始化所有元素爲-1 ,,,然後我想設置數組元素與一些值,,但劑量不工作如何設置在C + +

int rowCount,t; 

t=4; rowCount = t/3 + (t % 3 != 0); 

int** ary = new int*[rowCount]; 
for(int i = 0; i < rowCount; ++i) 
    ary[i] = new int[t]; 


for (int n = 0; n < rowCount*t; n++) 
    *((int*)ary + t) = -1; 

for(int m=0;m<rowCount;m++) 
    for(int h=0;h<t;h++) 
ary[m][h]=a[h]; // a is predefined array 
+0

乍一看,你似乎沒有初始化'rowCount'和't'。那將是一場表演賽。 – Logicrat

+0

我初始化它們'T = 4;''rowCount時= T/3 +(T%3!= 0);' – lolo

+0

爲什麼初始化是不正確? – lolo

回答

1

如果仔細分析以下幾行,您會意識到您正在訪問內存越界並且程序出現未定義的行爲。

for (int n = 0; n < rowCount*t; n++) 
    *((int*)ary + t) = -1; 

*((int*)ary + t) = -1; 

是錯誤以下計數。

  1. 你投int**int*

  2. 您已經使用多次調用new分配的內存,但你試圖把它當作雖然所有int S使用一個呼叫new所分配的數據。

簡單的解決方法是:

for (int row = 0; row < rowCount; row++) 
{ 
    for (int col = 0; col < t; ++col) 
    { 
     arr[row][col] = -1; 
    } 
} 

您還可以使用一個調用new所有int小號分配內存的選項。在這種情況下,您不得不擔心將行和列映射到其餘代碼中的一個索引。

// Allocate memory in one chunk. 
int* arr = new int[rowCount+t]; 

// Initialize values to -1. 
for (int n = 0; n < rowCount*t; ++n) 
{ 
    arr[n] = -1; 
}