Лучший способ использования malloc и realloc

Я новичок в использовании 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

1

Решение

Честно говоря, избегайте использования realloc многократно. malloc один раз и придерживайтесь этого, пока не столкнетесь с крайним случаем, затем realloc (но даже тогда избегайте этого!)

Основной причиной этого является отладка и тестирование. Если программа не работает в realloc, это может быть по нескольким причинам … и большинство из них исходит от ОС. (то есть не хватает памяти, пытается использовать только что освобожденную память и т. д.) Это трудные ошибки для воспроизведения и отладки.

Сделайте небольшую математику, вычислите максимум, который вам понадобится для вашего варианта использования и malloc тот. Перейдите к кодированию других вещей. отладка realloc ошибки не весело.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]