Неверная контрольная сумма для освобожденного объекта в malloc

Я получаю

malloc: *** error for object 0x1001012f8: incorrect checksum for freed object
        - object was probably modified after being freed.
        *** set a breakpoint in malloc_error_break to debug

ошибка в следующей функции:

char* substr(const char* source, const char* start, const char* end) {
    char *path_start, *path_end, *path;

    int path_len, needle_len = strlen(start);

    path_start = strcasestr(source, start);
    if (path_start != NULL) {
        path_start += needle_len;
        path_end = strcasestr(path_start, end);
        path_len = path_end - path_start;
        path = malloc(path_len + 1);
        strncpy(path, path_start, path_len);
        path[path_len] = '\0';
    } else {
        path = NULL;
    }

    return path;
}

Как я могу заставить это работать? Когда я переписываю функцию для выделения памяти с помощью path[path_len + 1], она работает нормально.

Теперь я не понимаю, что я никогда даже не вызываю freeни в одной точке моего приложения, так как каждая выделенная память необходима для программы, пока она не существует (, что, AFAIK, в любом случае сделает недействительной каждую выделенную память ?!)

Итак, как освобожденный объект может быть поврежден, если я никогда не освобождал его?

Функция вызывается в этом:

char *read_response(int sock) {
    int bytes_read;
    char *buf = (char*)malloc(BUF_SIZE);
    char *cur_position = buf;

    while ((bytes_read = read(sock, cur_position, BUF_SIZE)) > 0) {
        cur_position += bytes_read;
        buf = realloc(buf, sizeof(buf) + BUF_SIZE);
    }

    int status = atoi(substr(buf, "HTTP/1.0 ", " "));

Есть realloc, я неправильно его использую? Я хочу прочитать полный ответ сервера, поэтому мне приходится перераспределять ресурсы после каждой итерации, не так ли?

5
задан F.P 12 July 2012 в 18:48
поделиться