, чтобы поместить вас в некоторый контекст здесь, проект i test с valgrind является слегка измененной версией distcc . Сбой функции не был изменен. Точное место в коде, которое является проблематичным, - это функция dcc_compress_file_lzo1x в compress.c. Это выглядит так:
int dcc_compress_file_lzo1x(int in_fd,
size_t in_len,
char **out_buf,
size_t *out_len)
{
char *in_buf = NULL;
int ret;
if ((in_buf = malloc(in_len)) == NULL) {
rs_log_error("allocation of %ld byte buffer failed",
(long) in_len);
ret = EXIT_OUT_OF_MEMORY;
goto out;
}
Проблема здесь в том, что malloc в операторе if. Если я обычно запускаю эту программу, она случайно выходит из строя (я завернул все это в отладочные отпечатки), и я имею в виду, что программа вылетает при выполнении malloc, не производя ошибку печати. С другой стороны, если я запускаю программу с помощью valgrind, все проходит, и valgrind не производит ничего полезного.
Я не ищу простого ответа. Я просто хотел бы знать, как отладить это, потому что у меня нет идей.