私はCクラスの課題をここ数日間作業していましたが、Cのrealloc()関数に関する不思議なクラッシュを経験しました。 C++のプログラマーは、自分のコードで何が間違っているのかすぐに私に答えられませんでした。realloc()を何度か呼び出すとCプログラムがクラッシュする
まず私は1つの関数でメモリ・ブロックを作成します。
char *line = (char *)malloc(sizeof(char) * BUFSIZE);
その後、私は私がにBUFSIZEを設定する内容に応じて、それが第五コール(BUFSIZE =の後にクラッシュするgetMoreBuf(start_of_block, end_of_block)
int getMoreBuf(char *start, char *end)
{
char *newBuf = 0;
int newSize = (end - start) + BUFSIZE;
newBuf = (char *)realloc(start, sizeof(char) * newSize);
if(NULL == newBuf) {
printf("No virtual RAM available");
}else{
start = newBuf;
}
return newSize;
}
を呼び出します1)または3番目の呼び出し(BUFSIZE = 5)を返し、読み込まれた文字をナンセンスに置き換えます。
誰かが私のエラーに向かって私を指摘し、それらを修正するためにどこを読むべきかを示唆することができますか? 何か助けていただければ幸いです。 :)
賞与質問:私は、メモリブロック内の1つのブロックに向かって、ポインタ1が最初のポインタ、後のポインタ2のポイント2を持つメモリブロックをmallocします。私はrealloc()ブロックとサイズの問題のためにブロックが移動され、ポインタ2はまだ古い(今は役に立たない)ブロックを指していますか、それはメモリブロックの新しい位置にreallocで "移動"ですか?
(また、将来のために、私は新しい問題には、余分な質問を置くべきか、それが強く最初の質問に関連しているので、私はここでそれを残すことができますか?)
をご入力ありがとうございました、何がうまくいかなかったかを理解するのに大いに役立ちました。 もし私が正しい答えとしてそれぞれを記入することができれば、それぞれが何らかの形で私の助けを借りて、この気の利いたポインタビジネスについてもう少し理解することができたからです。 =)
[*でもプログラマー*](http://c-faq.com/ptrs/passptrinit。html)Cプログラマを試してみたはずですか? – cnicutar
はい、私はCとC++のプログラマーを試しましたが、私はそれを言い忘れました。私はそれを修正し、私はリンクを調べます。 – Plastefuchs