reallo c (): неверный следующий размер. Не удалось прочитать страницу http в строку - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь прочитать страницу HTTP и сохранить всю страницу в виде строки. В то время как reallo c () памяти, происходит ошибка, заявляя, что: reallo c (): неверный следующий размер: 0x0000000001505e10 *** ...

Ниже приведен мой код, заранее спасибо

char* get_http(int my_socket, char* buffer){
    char* http_page = calloc(BUFFER_SIZE, sizeof(char));
    assert(http_page);
    int cur_size = BUFFER_SIZE;
    int cur_len = 0;

    // read the http, and write into http_page

    bzero(buffer, BUFFER_SIZE);
    while (read(my_socket, buffer, BUFFER_SIZE - 1) != 0){
        // if the size if not enough, reallocate the memory
        if (cur_len + strlen(buffer) >= cur_size){
            cur_size = cur_size* 2;
            http_page = (char*)realloc(http_page, cur_size);
            assert(http_page);
        }
        cur_len += strlen(buffer);
        strcpy(http_page + cur_len, buffer);
        bzero(buffer, BUFFER_SIZE);
    }
    return http_page;}

1 Ответ

0 голосов
/ 29 марта 2020

Проблема здесь:

cur_len += strlen(buffer);
strcpy(http_page + cur_len, buffer);

Вы обновляете cur_len перед копированием, поэтому скопированные данные go на неправильный адрес, что приводит к повреждению кучи.

...