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