Я пытаюсь получить динамический двумерный массив в C.
Всякий раз, когда программа пытается получить доступ к значению в массиве, я проверяю, является ли массив достаточно большим.Если не больше, должно быть выделено место для хранения.Приведенный ниже код проверяет, достаточно ли в массиве столбцов или нет, он перераспределяет новую память.
unsigned long cnt; // y is the element we are trying to access, playfieldsize stores the size of the array
if (y >= playfieldsize.y) { // if the array isn't large enough more data should be allocated
char **tmp;
unsigned long cnt;
cnt = playfieldsize.y; // stores the old size of the array
playfieldsize.y += (y - playfieldsize.y) + INCREASE; // the new array size
if (tmp = realloc(playfield, playfieldsize.y * sizeof(char *))) { // if storage can be allocated for the new size
playfield = tmp;
for (; cnt<playfieldsize.y; cnt++) { // for every new column a row is added
char *tmp;
printf("cnt=%lisize=%li\n", cnt, playfieldsize.y); // added for debugging purpose
if (tmp = realloc(playfield[cnt], sizeof(char) * playfieldsize.x)) // segfault happens here
playfield[cnt] = tmp;
else
die("Not enough initial memory");
}
} else // if storage could not be reallocated
die("Not enough initial memory");
}
Однако я получаю ошибку сегментации при обращении к массиву с помощью y значение, которое постоянно увеличивается на единицу.Вот что распечатывает программа:
...
cnt=327size=330
cnt=328size=330
cnt=329size=330
cnt=330size=360
cnt=331size=360
Segmentation fault
И я получаю этот segfault, когда я вначале обращаюсь к массиву с несколькими значениями <10 <em>y и затем одним из 301:
...
cnt=27size=30
cnt=28size=30
cnt=29size=30
cnt=30size=330
cnt=31size=330
Segmentation fault
Итак, в первом примере он инициализировал строки до 331, прежде чем произошла ошибка, а во втором - 31. Я не могу понять, что происходит, мне это кажется довольно случайным.
Это вся программа, если необходимо: http://pastebin.com/13mRDh8A