Ошибка Invalid pointer при использовании malloc и struct - C (СИ)
Формулировка задачи:
Здравствуйте.
Написал программу для того, чтобы понять работу malloc.
При выполнении программы возникает ошибка:
И еще есть утечка памяти:
#include <stdio.h> #include <stdlib.h> typedef struct { char* first_name; char* last_name; } Entry; int main(void) { Entry *e; e = malloc(1*sizeof(Entry)); (*e).first_name=malloc(10*sizeof(char)); (*e).first_name="Dmitry"; (*e).last_name=malloc(10*sizeof(char)); (*e).last_name="Sidorov"; printf("%s %s\n", (*e).first_name, (*e).last_name); free((*e).first_name); free((*e).last_name); free(e); return EXIT_SUCCESS; }
./test Dmitry Sidorov *** Error in `./test': munmap_chunk(): invalid pointer: 0x0000000000400714 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x7f4c6)[0x7fd9aaff44c6] ./rodion[0x400643] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7fd9aaf96de5] ./rodion[0x4004f9] ======= Memory map: ======== 00400000-00401000 r-xp 00000000 08:01 2752626 /home/dmitry/Desktop/c/test 00600000-00601000 r--p 00000000 08:01 2752626 /home/dmitry/Desktop/c/test 00601000-00602000 rw-p 00001000 08:01 2752626 /home/dmitry/Desktop/c/test 014b9000-014da000 rw-p 00000000 00:00 0 [heap] 7fd9aad5f000-7fd9aad74000 r-xp 00000000 08:01 1577226 /lib/x86_64-linux-gnu/libgcc_s.so.1 7fd9aad74000-7fd9aaf73000 ---p 00015000 08:01 1577226 /lib/x86_64-linux-gnu/libgcc_s.so.1 7fd9aaf73000-7fd9aaf74000 r--p 00014000 08:01 1577226 /lib/x86_64-linux-gnu/libgcc_s.so.1 7fd9aaf74000-7fd9aaf75000 rw-p 00015000 08:01 1577226 /lib/x86_64-linux-gnu/libgcc_s.so.1 7fd9aaf75000-7fd9ab132000 r-xp 00000000 08:01 1576723 /lib/x86_64-linux-gnu/libc-2.17.so 7fd9ab132000-7fd9ab332000 ---p 001bd000 08:01 1576723 /lib/x86_64-linux-gnu/libc-2.17.so 7fd9ab332000-7fd9ab336000 r--p 001bd000 08:01 1576723 /lib/x86_64-linux-gnu/libc-2.17.so 7fd9ab336000-7fd9ab338000 rw-p 001c1000 08:01 1576723 /lib/x86_64-linux-gnu/libc-2.17.so 7fd9ab338000-7fd9ab33d000 rw-p 00000000 00:00 0 7fd9ab33d000-7fd9ab360000 r-xp 00000000 08:01 1576697 /lib/x86_64-linux-gnu/ld-2.17.so 7fd9ab541000-7fd9ab544000 rw-p 00000000 00:00 0 7fd9ab55b000-7fd9ab55f000 rw-p 00000000 00:00 0 7fd9ab55f000-7fd9ab560000 r--p 00022000 08:01 1576697 /lib/x86_64-linux-gnu/ld-2.17.so 7fd9ab560000-7fd9ab562000 rw-p 00023000 08:01 1576697 /lib/x86_64-linux-gnu/ld-2.17.so 7fff751ee000-7fff7520f000 rw-p 00000000 00:00 0 [stack] 7fff75361000-7fff75363000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Aborted
valgrind -v --tool=memcheck --leak-check=yes ./test ==13378== LEAK SUMMARY: ==13378== definitely lost: 13 bytes in 2 blocks ==13378== indirectly lost: 0 bytes in 0 blocks ==13378== possibly lost: 0 bytes in 0 blocks ==13378== still reachable: 0 bytes in 0 blocks ==13378== suppressed: 0 bytes in 0 blocks
Решение задачи: «Ошибка Invalid pointer при использовании malloc и struct»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char* first_name; char* last_name; } Entry; int main(void) { Entry *e; e = malloc(sizeof(Entry)); e->first_name = malloc (10 * sizeof(char)); memmove (e->first_name, "Dmitry", 7); e->last_name = malloc (10 * sizeof(char)); memmove (e->last_name, "Sidorov", 8); printf("%s %s\n", e->first_name, e->last_name); free(e->first_name); free(e->last_name); free(e); return EXIT_SUCCESS; }
Объяснение кода листинга программы
- Подключение необходимых библиотек:
, , - Создание структуры
Entry
с полями first_name и last_name типа char* - Выделение памяти под структуру Entry с помощью malloc
- Выделение памяти под строку first_name с помощью malloc и memmove для копирования строки
Dmitry
- Выделение памяти под строку last_name с помощью malloc и memmove для копирования строки
Sidorov
- Вывод значений полей first_name и last_name на экран с помощью printf
- Освобождение памяти, выделенной под first_name и last_name с помощью free
- Освобождение памяти, выделенной под структуру Entry с помощью free
- Возврат успешного завершения программы с помощью return EXIT_SUCCESS
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д