簡體   English   中英

2D數組索引中的C ++錯誤

[英]c++ error in 2D array index

我正在使用C ++程序,問題在下面的代碼中。 (注意:代碼已經過簡化,以提高可讀性,但本質仍然存在)。 在第一部分中,我只是創建一些簡單條件的2D數組

    rows= 5/2;
    cols= 4/2;

    char** array;
    if(rows%2 !=0 ){
     array = new char*[rows+1];
    }else {
         array = new char*[rows];
    }
    for(int k = 0; k < rows; k++)
    {
        if(columns%2 !=0){
            array[k] = new char[cols+1];
        }else{
            array[k] = new char[cols];
        }

    }

到現在為止還挺好。 該代碼運行完美。 下一部分是問題所在

  for(int k = rows; k<5; k++){
        for (int l=0; l< 2; l++){
            array[k-rows][l]=Array2[k][l];            
        }
    }

因此,基本上,這段代碼只是檢索較大數組( array2 )的一小部分並將其插入到array 但是錯誤不斷出現在array[k-rows][l]=Array2[k][l]; 它說Thread 1:Exc_BAD_ACCESS(code = 1, address = 0xe) (我正在使用xcode 7.2)

rows= 5/2 ; 您將rows設置為2 比您分配2 rows array = new char*[rows]; 但是, for(int k = rows; k<5; k++) ,您需要從2迭代到4 for(int k = rows; k<5; k++)然后寫入0到2行array[k-rows][l] 您從未分配帶有索引2的行。

rows= 5/2; // now rows is 2
...
if(rows%2 !=0 ) // 2%2!=0

嘗試這個:

rows= 5;
cols= 4;

int allocRows = ( rows%2==0 ) ? rows/2 : rows/2+1;
rows=rows/2;

int allocCols = ( cols%2==0 ) ? cols/2 : cols/2+1;
cols=cols/2;

array = new char*[allocRows];
for(int k = 0; k < allocRows; k++)
    array[k] = new char[allocCols];

... 或這個 ...

int origRows = rows; 
rows= 5/2;
...
if(origRows%2 !=0 )
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM