Я достиг точки, где realloc прекращает возвращать указатель - я предполагаю, что для расширения или перемещения массива недостаточно места.Единственная проблема в том, что мне действительно нужно, чтобы память существовала, или приложение не может работать так, как ожидалось, поэтому я решил попробовать malloc - ожидая, что он не будет работать, поскольку realloc не будет работать - но он это сделал.Почему?
Затем я запомнил массив указателей в новый выделенный массив, но обнаружил, что он сломал его, указатели типа 0x10 и 0x2b были помещены в массив.Существуют настоящие указатели, но если я заменю memcpy на цикл for, это исправит это.Почему memcpy сделал это?Разве я не должен использовать memcpy в моем коде?
Код:
float * resizeArray_by(float *array, uint size)
{
float *tmpArray = NULL;
if (!array)
{
tmpArray = (float *)malloc(size);
}
else
{
tmpArray = (float *)realloc((void *)array, size);
}
if (!tmpArray)
{
tmpArray = (float *)malloc(size);
if (tmpArray)
{
//memcpy(tmpArray, array, size - 1);
for (int k = 0; k < size - 1; k++)
{
((float**)tmpArray)[k] = ((float **)array)[k];
}
free(array);
}
}
return tmpArray;
}
void incrementArray_andPosition(float **& array, uint &total, uint &position)
{
uint prevTotal = total;
float *tmpArray = NULL;
position++;
if (position >= total)
{
total = position;
float *tmpArray = resizeArray_by((float *)array, total);
if (tmpArray)
{
array = (float **)tmpArray;
array[position - 1] = NULL;
}
else
{
position--;
total = prevTotal;
}
}
}
void addArray_toArray_atPosition(float *add, uint size, float **& array, uint &total, uint &position)
{
uint prevPosition = position;
incrementArray_andPosition(array, total, position);
if (position != prevPosition)
{
float *tmpArray = NULL;
if (!array[position - 1] || mHasLengthChanged)
{
tmpArray = resizeArray_by(array[position - 1], size);
}
if (tmpArray)
{
memcpy(tmpArray, add, size);
array[position - 1] = tmpArray;
}
}
}
После всех моих исправлений, код, вероятно, начался.Интересно, что после сортировки массивов я выделяю с помощью malloc огромный массив, чтобы переупорядочить массивы в один массив, который будет использоваться как GL_ARRAY_BUFFER.Если realloc не выделяется из-за нехватки места, то почему не выделяет?
Наконец, в конце концов это приводит к краху.После прохождения через функцию рендеринга однажды она вылетает.Если бы я удалил все свои исправления и просто поймал, когда realloc не выделяет, он бы работал нормально.В связи с этим возникает вопрос: что плохого в том, чтобы неправильно использовать мой массив вместо того, чтобы перераспределять, что вызывает проблемы в дальнейшем?
Массивы My Array являются указателями на указатели с плавающей точкой.Когда я расту массив, он преобразуется в указатель на float и перераспределяется.Я строю на Android, поэтому я предположил, что там не хватает памяти.