質問: reallocの使い方について 下記コードを実行すると,abendしてしまいます. 本来,alloc_testでは,htmlを取得して戻したい(htmlのサイズは可変)のですが,伸張ができず悩んでおります.ヒント等ご教示いただければ幸いです. また,修正方法の他,何故,下記コードがまずいのかについてもご説明いただければと思います. なお,コメントアウトにもあります通り,配列サイズを十分に大きくとり,reallocの処理を入れないなどの回避方法は望んでいません. //--ここから(全角スペースを使用しています) #include #include int alloc_test(char *c){ char *t; t=(char *)realloc(c, sizeof(char) * 100); if(null==t) return -1; c=t; return 0; } int main(void){ char *a="\0"; alloc_test(a); return 0; } //--ここまで よろしくお願いいたします.
回答: abendって異常終了の事だと思いますが、用語としてもう一般的になったんでしょうかねぇ... ここ10年くらいプログラム組んでないので、間違っているかもしれませんが... このプログラムだと、根本的にmainに問題があるような気がします。 char *a="\0"; ←ここ char *a; a=(char *)calloc(10*sizeof(char)); if( a == null) { printf("メモリが確保できません\n"); exit(exit_failure); } sprintf(a,"\0"); reallocが使えるのは、mallocとかcalloc、realloc等で 動的なメモリ割り当てがおこなわれた場合だけだったような気がします。 するのであれば、aは、mallocかcallocで動的領域を確保してから関数に渡してください。