#c #malloc
#c #malloc
Вопрос:
Я пытаюсь написать функцию, которая принимает 2 массива и их размер (оба одинакового размера) и возвращает массив, в котором каждое число из первого массива появляется столько раз, сколько раз в одном и том же индексе во втором массиве. Пример: ввод: {2,5,3,7,8},{5,2,0,4,3},5 вывод: {2,2,2,2,2,5,5,7,7,7,7,8,8,8}
Мой текущий код:
#include <stdio.h>
#include <stdlib.h>
int* blowUpArray(int numArray[], int amountArray[], int size);
int* reallocateArr(int* arr, int currLogSize, int newSize);
int main() {
int arr1[] = {2,5,3,7,8},arr2[] = {5,2,0,4,3}
int* res;
res = blowUpArray(arr1,arr2,5);
for (int i = 0; i < 14; i )
printf("%d ", res[i]);
return 0;
}
int* blowUpArray(int numArray[], int amountArray[], int size)
{
int i = 0,currSize = 0,j;
int* blownUp;
while (i < size)
{
blownUp = reallocateArr(numArray,currSize,amountArray[i]);
for (j = currSize; j < currSize amountArray[i]; j )
{
blownUp[j] = numArray[i];
}
currSize = currSize amountArray[i];
i ;
}
return blownUp;
}
int* reallocateArr(int* arr, int currLogSize, int addedSize)
{
int* newArr;
int i;
newArr = (int*)malloc((currLogSize addedSize) * sizeof(int));
if (newArr == NULL)
{
printf("Memory allocation failed.n");
exit(1);
}
for (i = 0; i < currLogSize; i )
newArr[i] = arr[i];
free(arr);
return newArr;
}
Я получаю эту ошибку:
malloc: *** error for object 0x7ffee644b6f0: pointer being freed was not allocated
malloc: *** set a breakpoint in malloc_error_break to debug
Есть идеи?
Ответ №1:
reallocateArr
Функция освобождает arr
параметр. Он вызывается следующим образом:
reallocateArr(numArray,currSize,amountArray[i]);
Где numArray
параметр функции blowUpArray
, которая вызывается следующим образом:
res = blowUpArray(arr1,arr2,5);
Где arr
— массив, локальный для main
функции. Поскольку этот массив был объявлен как локальная переменная, вы не можете передать его free
.
Вы, вероятно, хотели перейти blownUp
к reallocateArr
:
reallocateArr(blownUp,currSize,amountArray[i]);
Вы также должны инициализировать эту переменную, чтобы NULL
:
int* blownUp = NULL;
Таким образом, вы можете безопасно передать его free
на первой итерации цикла blowUpArray
.