Ошибка при очистке памяти в динамическом массиве - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д