моя функция получает два существующих массива (+ размеры) и указатель, которые в функции строят новый массив и realloc размер в конце. , наконец, функция возвращает новый размер, но printf нового массива сбой. Алгоритм работы корпуса нового размера действительно прав.Проблемы с realloc и array
int UniteArray(int *a,int sizeA,int *b,int sizeB,int *tempArray)
{
int i=0,j=0,counter=0;
tempArray=(int*)malloc(sizeA*sizeof(int));
while (i<sizeA)
{
if (a[i]==b[j])
{
tempArray[counter++]=a[i];
i++;j++;
}
else if (a[i]<b[j])
i++;
else if (b[j]<a[i])
j++;
}
tempArray=(int*)realloc(tempArray,counter);
return counter;
}
здесь вызов функции;
void Ex3()
{
int *a,*b,*unite;
int sizeA,sizeB,newSize,counter,i;
a=BuildArray(&sizeA);//Build the A array.
b=BuildArray(&sizeB); //Build the B array.
merge_sort(a,0,sizeA-1);//merge the A array.
merge_sort(b,0,sizeB-1); //merge the B array.
counter=UniteArray(a,sizeA,b,sizeB,&unite); //<<<<<<< HERE
printf ("The new Length: %d.\n",counter);
for (i=0;i<counter;i++)
printf ("%d ",unite[i]);
Таким образом, вы игнорируете предупреждения компилятора (или используете древний компилятор), но знаете, почему ваш код не работает. В следующий раз включите все рекомендуемые предупреждения, скопируйте код без предупреждения и используйте отладчик. И узнайте, что такое локальные переменные. Это должно было быть первым в вашей книге или уроке. Если последнее: сообщите своему учителю, чтобы он уточнил о локальных переменных и пошаговой стоимости. – Olaf
* Ahem * Чтобы сделать это немного более аккуратно ... OP, вам нужно включить полный текст ошибки в свой вопрос. Мы действительно не можем помочь вам с «он разбился» или «произошла ошибка». Если это «ошибка сегментации», вам может понадобиться использовать другой инструмент для поиска причины. См. [Этот вопрос и ответ] (http://stackoverflow.com/q/33047452/472647) для получения дополнительной информации о segfaults. – CodeMouse92