Ошибка при очистке памяти в динамическом массиве - C (СИ)

Узнай цену своей работы

Формулировка задачи:

вот имеется такой код. программа, которая вставляет массив в массив. всё работает правильно, но в конце выскакивает ошибка. при этом если убрать строчку free(a); то ошибки не возникает. я вот не понимаю, получается надо очистить память только для массива b? но что тогда с массивом а?
#include <conio.h>
#include <stdio.h>
#include <malloc.h>
#include <time.h>
#include <stdlib.h>
void generate(int na, int **a)
{
int i, *pa;
*a=(int *)malloc(na*sizeof(int));
pa=*a;
for (i=0; i<na; i++)
    *(pa+i)=rand()%abs(20)-10;
}
void show(int na, int *a)
{
int i;
for (i=0; i<na; i++)
    printf ("%d ", *(a+i));
printf("\n");
}
//------------------------------------------------------
void insertArray(int *a, int nb, int na, int m, int *b)
{
int i, j, k;
a=(int *)realloc(a, (na+nb)*sizeof(int));
for(k=0; k<nb; k++)
    for (i=na+nb-2; i>=m-1+k; i--)
        *(a+i+1)=*(a+i);
for (i=0; i<nb; i++)
        *(a+i+m-1)=*(b+i);
for (i=0; i<na+nb; i++)
    printf ("%d ", *(a+i));
}
int main (void)
{
srand (time(NULL));
int *a=NULL;
int *b=NULL;
int na, nb, ch, m;
scanf ("%d", &na);//для массива а
scanf ("%d", &nb);//для массива b
scanf ("%d", &m);//вставляем в m место
generate(na, &a);
generate(nb, &b);
show(na, a);
show(nb, b);
insertArray(a, nb, na, m, b);
free(a);
free(b);
getch();
return 0;
}

Решение задачи: «Ошибка при очистке памяти в динамическом массиве»

textual
Листинг программы
adr a before insertArray 0xe2d010
 
adr a in insertArray 0xe2d0a0
-10 -1 -5 2 -3 -10 -2 -3 5 -3 1 -8 2 7 -4 -9 -2 8 7 -1 7 -1 -4 0 1 4 6 
adr a after insertArray 0xe2d010

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы