2012-04-17 3 views
0


Я вызываю функцию рекурсивно и которая выделяет 2048 байт, выделяется в каждом вызове. Запуск приложения выполняется по требованию, но позже он становится разбитым, ошибка «Недостаточно памяти для обработки этой команды». И распределитель памяти возвращает плохой указатель памяти, для которого приложение разбивается. Скажем, кто-нибудь, пожалуйста, помогите мне по этой проблеме.Недостаточно памяти для обработки этой команды

char* parser(char *data){ 
    char *string,*ptr,*result; 
    int len; 

    len=strlen(data); 
    ptr=strstr(data,"search"); 

    if(ptr){ 
    buf = (char *)GlobalAlloc(GPTR,sizeof(char)*len+1); 
    strncpy(buf,data,ptr-data); 
    buf[ptr-data]='\0'; 
    result=parser(buf); 
    GlobalFree(buf); 
    return result; 
    } 
} 
+1

Купить больше памяти? – Nick

+0

Возможный дубликат [Системная ошибка. Код: 8. Недостаточно хранения для обработки этой команды] (http://stackoverflow.com/questions/507853/system-error-code-8-not-enough-storage-is-available-to-process- thisis -command) –

ответ

3

Ну ... Это вроде очевидно:

Не вызывать эту функцию так много раз, без того, освобождая память, как только он больше не нужен. Если распределение сделано призывами все необходимы в то же время (когда рекурсия завершает), то вам не повезло, и нужно либо:

  • купить больше памяти,
  • фигуру из более компактное представление,
  • Разделить решение на более мелкие шаги.
Смежные вопросы