2015-12-20 21 views
1

我想修改一個字符數組中的單個隨機元素,其中包括'0','1''2'。只有'0'可以修改,這就是爲什麼我首先將它們的索引放入另一個數組(如果有辦法更有效地做到這一點,我會很樂意改變它)。將數組作爲參數的堆棧跟蹤錯誤

不過,我得到一個

cygwin_exception::open_stackdumpfile: Dumping stack trace 

我知道問題來源於此功能

void ai_move(char (*array)[10]) 
{ 
    srand (time(NULL)); 

    unsigned char* possible_indexes = {0}; 
    int cpt = 0; 
    for (int i = 0; i < MAXDATASIZE - 1; ++i) 
     if ((*array)[i] == '0') 
     { 
      possible_indexes[cpt] = i; 
      ++cpt; 
     } 
    int rand_index = rand() % (sizeof(possible_indexes) - 1); 
    (*array)[possible_indexes[rand_index]] = '1'; 
} 

我稱之爲是這樣的:

ai_move(&grid); 

grid包含字符數組我想修改,並定義爲:

char grid[MAXDATASIZE] = {'0', '0', '0', '0', '0', '0', '0', '0', '0'}; 

我知道問題可能來自我給grid作爲參數的方式,但在搜索我找不到這將改變什麼的溶液小時後。

謝謝你幫助我。

+0

你確定你的數組長度等於MAXDATASIZE嗎? – Ashalynd

+2

因爲'possible_indexes'只包含一個值,所以在嘗試訪問'possible_indexes [cpt]'時可能會出現段錯誤 – ForceBru

+0

您的網格數組只有9個條目。什麼是MAXDATASIZE?是10嗎? – Ashalynd

回答

3
unsigned char* possible_indexes = {0};  

嗯,你聲明一個指針,但你沒有分配足夠的內存給它(正是你甚至不分配內存),並嘗試在無效的位置,在後面的迭代來寫。

possible_indexes[cpt] = i; 

要麼分配內存以possible_indexes第一,然後嘗試寫或聲明爲具有期望的尺寸的陣列。

注意 - 同樣關於這sizeof(possible_indexed) -

int rand_index = rand() % (sizeof(possible_indexes) - 1); 

,這將給指針的大小,而不是他通常會所需元素的數量即。

+0

我第一次聲明它是'unsigned char * possible_indexes;'。這會起作用嗎? – Blublublub

+0

@Blublublub No。如果你將它聲明爲指針,那麼使用'malloc'分配內存,或者聲明爲數組'unsigned char possible_indexes [50]'。 – ameyCU

+0

我明白了。我將聲明它爲unsigned char possible_indexes [9],因爲它是最大尺寸。那麼我怎樣才能將它的尺寸修改成它的實際尺寸呢? – Blublublub