C malloc увеличить размер буфера - PullRequest
0 голосов
/ 10 марта 2010

это часть моего кода, который читает HTTP-ответ. Предполагается увеличить размер буфера, если ему не хватает места. Но я продолжаю получать нарушения доступа. Это происходит при копировании данных в новый буфер: memcpy (tmp_alloc, rec, ResponseLength); Любая помощь / предложения приветствуются.

#define SERVER_CHUNK 1024

char *rec = new char[10000];
char in_buff[SERVER_CHUNK];
int in_sz, 
    ResponseLength = 0, 
    rec_len = 10000;

in_sz = recv(ss,in_buff,SERVER_CHUNK,0);//get the response  

while(in_sz > 0)
{           

    memcpy(rec + ResponseLength,in_buff,in_sz);
    ResponseLength += in_sz;

    if((ResponseLength + SERVER_CHUNK) > rec_len)
    {
        char *tmp_alloc = (char*) malloc (ResponseLength + SERVER_CHUNK); 
        if(!tmp_alloc)
        {   
            printf("failed to alocate memory!\n");
            break;
        }
        memcpy(tmp_alloc, rec, ResponseLength);
        free(rec);
        rec = tmp_alloc;
        rec_len = ResponseLength + SERVER_CHUNK; 
    }

    in_sz = recv(ss,in_buff,SERVER_CHUNK,0);    
}   

Ответы [ 2 ]

4 голосов
/ 10 марта 2010

Возможно, вы портите кучу, смешивая new [] с free (), что не поддерживается.

Изменение:

char *rec = new char[10000];

Кому:

char *rec = (char*) malloc( 10000);

и посмотрим, имеет ли это какое-то значение.

0 голосов
/ 10 марта 2010

не лучше ли иметь эти данные в виде списка буферов? Таким образом, вам не нужно перераспределять / копировать все данные каждый раз, когда вы превышаете свой буфер. вам нужно будет поддерживать только один / двойной связанный список

...