2011-11-29 25 views
0

即時動態二維數組試圖將值插入到字符的動態二維數組:插入到在C

theBoard->_board[row][col] = val; 

但上的焦炭的每個分配到(行,列),它也把它(第一行,第八行)。 可能是什麼問題?

這裏的陣列分配:

if ((new = (BoardP) malloc(sizeof(struct Board))) == NULL) 
{ 
    reportError(MEM_OUT); 
    return NULL; 
} 
if ((new->_board = (char**) malloc(rows * sizeof(char*))) == NULL) 
{ 
    reportError(MEM_OUT); 
    return NULL; 
} 
int i,j; 
for (i=0;i<rows;i++) 
{ 
    if ((new->_board[i] = (char*) malloc(cols * sizeof(char))) == NULL) 
    { 
     reportError(MEM_OUT); 
     return NULL; 
    } 

當我插入一個 'X' 和印刷用:

BoardP b = createNewDefaultBoard(); 
b->_board[2][0] = 'X'; 
printBoard(b,0,0); 

我得到這樣的輸出:

 0 1 2 3 4 5 6 7 8 9 
0         
1       X 
2 X       
3         
4         
5         
6         
7         
8         
9         
+0

即使您編碼爲C,請避免使用C++中保留關鍵字「new」。另外,分配之後是否初始化內存(以避免讀取垃圾)? – ziu

+0

首先:不要施加'malloc'的結果 – Constantinius

+0

是的,我正在初始化數組。 – user1071351

回答

2

你的棋盤可能只有8列。如果您訪問第8列,您將讀取(或寫入)內存中下一個內容,除最後一行外的所有內容都是下一行。

<0,1> <0,2> <0,3> <0,4> <0,5> <0,6> <0,7> --> 
<1,0> <1,2> <1,3> <1,4> <1,5> <1,6> <1,7> --> 
... 
+0

基本上該板被初始化爲10X10。當我插入(X)到(2,0)時,它也出現在(1,8)中。 – user1071351

+0

例如,如果您將'a'設置爲<1,7>,則可以使用<0,15>訪問它。這裏有一個簡單的數組運算,像[a] [7]就像(a + 1).8 + 7 => a [0] [15]將是(a + 0).8 + 15所有最後一樣。 – LostMohican

+0

你真的確定'cols'是10而不是8嗎?因爲5和8之間的cols值是您看到的行爲的最可能的解釋。 –