• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:reallocの使い方について)

reallocの使い方について

このQ&Aのポイント
  • reallocの使い方について質問しています。
  • 特定のコードを実行するとabendしてしまいます。
  • 修正方法や問題の原因について教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

添付のようにすれば、とりあえず動きます。 reallocの意味ないですが、a=NULLなのでmallocとして動くので問題ないです。 ただし呼び出し元でアロケートサイズがわからない設計は問題です。 せめてalloc_test()の戻り値でsizeof(char) * 100を返してやるとかしないと、 main()側ではどれだけのサイズを使えるのかわかりません。 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=NULL; alloc_test(&a); return 0; }

hyd155
質問者

お礼

回答ありがとうございます. > ただし呼び出し元でアロケートサイズがわからない設計は問題です。 なるほど. alloc_test(char **c, int *siz) のように,アロケートサイズを戻すようにすればよろしいでしょうか. ここは意識していませんでした. 解決方法もご提示いただき,ありがとうございました.

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

あとは > int alloc_test(char *c){ というのは[char *型の] c の値渡しなので、 > c=t; に意味が無い。 int foo(int a) { ... a= b ; } というのと同じこと。 なので、たとえreallocに成功しても、main関数のaは古いアドレスのまま。

hyd155
質問者

お礼

回答ありがとうございます. >> int alloc_test(char *c){ > というのは[char *型の] c の値渡しなので、 >> c=t; > に意味が無い。 なるほど. 何故上手くいかないかについて理解することができました. ありがとうございました.

noname#138695
noname#138695
回答No.1

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で動的領域を確保してから関数に渡してください。

hyd155
質問者

お礼

回答ありがとうございます. >このプログラムだと、根本的にmainに問題があるような気がします。 >char *a="\0"; ←ここ 問題点が少し見えていないのですが,これは自分で考えてみることにいたします. おっしゃる通り,mallocで確保してからalloc_test関数内でreallocしてみますと上手くいきました. 例示いただき,ありがとうございました.

関連するQ&A