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;
  }
}
4

1 に答える 1

3

まあ...それは一種の明白です:

必要がなくなったらすぐに使用されているメモリを解放せずに、関数を何度も呼び出さないでください。呼び出しによって行われた割り当てがすべて同時に必要な場合(再帰が完了した後)、運が悪いため、次のいずれかを行う必要があります。

  • より多くのメモリを購入し、
  • よりコンパクトな表現を理解し、
  • 解決をより小さなステップに分割します。
于 2012-04-17T09:32:51.093 に答える