После написания тысяч строк кода я использую valgrind и с ужасом вижу количество ошибок.Просто раньше использовал GDB.Большинство моих ошибок связаны со строковыми функциями.Я публикую часть.Я понимаю, что ошибка происходит, потому что strlen не считает завершающий NULL, тогда как strcpy добавляет его.Насколько это серьезно?Мне действительно нужно их исправить?Я могу это исправить, но волнуюсь, может ли это привести к большему количеству ошибок, так как мой код не учел это, когда я это написал.
Скопирует ли strcpy завершающий NULL, даже если для него не зарезервировано пространство?
t.write_length = (strlen("NA\n");/*Line number 116*/
t.data = malloc(strlen("NA\n");/*117*/
strcpy(t.data,"NA\n");/*118*/
Valgrind:
==3287== Invalid write of size 1
==3287== at 0x400764E: memcpy (mc_replace_strmem.c:497)
==3287== by 0x804A714: log_txn_commit (Log_manager.c:118)
==3287== by 0x8049D3C: on_txn_commit (TxFS_manager.c:85)
==3287== by 0x804939E: handler (Reader.c:139)
==3287== by 0xBF5F18: start_thread (in /lib/libpthread-2.12.90.so)
==3287== by 0xB37A2D: clone (in /lib/libc-2.12.90.so)
==3287== Address 0x403282b is 0 bytes after a block of size 3 alloc'd
==3287== at 0x4005BDC: malloc (vg_replace_malloc.c:195)
==3287== by 0x804A6F5: log_txn_commit (Log_manager.c:117)
==3287== by 0x8049D3C: on_txn_commit (TxFS_manager.c:85)
==3287== by 0x804939E: handler (Reader.c:139)
==3287== by 0xBF5F18: start_thread (in /lib/libpthread-2.12.90.so)
==3287== by 0xB37A2D: clone (in /lib/libc-2.12.90.so)