Я новичок в использовании malloc и realloc, и у меня есть несколько вопросов.
Вопрос 1.
Игра, которую я делаю, позволяет вам создать свой собственный космический чип, зная об этом, мне было интересно, лучше ли перераспределить в два раза больше текущей памяти, которая является стандартом. Или сделать что-то вроде перераспределения 100 дополнительных пробелов для нужных вершин?
Я думаю, что второй вариант был бы лучше, но, возможно, есть кое-что, о чем я не знаю.
вопрос 2
Если у меня есть неправильный массив квадратов [20] [4] Как перераспределить его по размеру квадратов [100] [4]? Могу ли я перераспределить 1-й массив на 100, а затем malloc 20-99 с 4 новыми точками?
Вопрос 3
Сейчас происходит нечто странное, когда я перераспределяю свои данные. Если я ставлю точку останова, все идет хорошо, но если я позволяю коду работать сразу, он падает. Я предполагаю, что есть утечка памяти. Прямо сейчас это мой код realloc.
unsigned char *temp =( unsigned char* ) realloc(realSpaceship, gridSize*sizeof( unsigned char ));
if(temp != NULL)
{
realSpaceship = temp;
//free(temp); Line is now deleted at the advice of the helpfull people here.
}
else
{
//error
printf("realloc error\n");
free(realSpaceship);
}
Я подумал, что освобождение temp было хорошей идеей, но оно просто приводит к сбою кода в другом месте.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Я только что понял, что проблема не в Realloc, а где-то еще.
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Маленькая дополнительная информация.
Я использую с ++
И я также использую GLM
Честно говоря, избегайте использования realloc
многократно. malloc
один раз и придерживайтесь этого, пока не столкнетесь с крайним случаем, затем realloc
(но даже тогда избегайте этого!)
Основной причиной этого является отладка и тестирование. Если программа не работает в realloc
, это может быть по нескольким причинам … и большинство из них исходит от ОС. (то есть не хватает памяти, пытается использовать только что освобожденную память и т. д.) Это трудные ошибки для воспроизведения и отладки.
Сделайте небольшую математику, вычислите максимум, который вам понадобится для вашего варианта использования и malloc
тот. Перейдите к кодированию других вещей. отладка realloc
ошибки не весело.
Других решений пока нет …