Я хочу изменить один случайный элемент в массиве символов, которые включают '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
содержит массив символов I требуется изменить и определяется как:
char grid[MAXDATASIZE] = {'0', '0', '0', '0', '0', '0', '0', '0', '0'};
Я знаю, что проблема может возникнуть из-за того, что я даю grid
в качестве аргумента, но после нескольких часов поиска я не смог найти решение, которое могло бы изменить что-либо.
Спасибо, что помогли мне.
Вы уверены, что длина вашего массива равна MAXDATASIZE? – Ashalynd
Вероятно, вы пытаетесь получить segfault при попытке доступа к 'possible_indexes [cpt]', поскольку 'possible_indexes' содержит только одно значение. – ForceBru
В вашем массиве grid есть только 9 записей. Что такое MAXDATASIZE? Это 10? – Ashalynd