私は現在Cでプログラミングすることを学んでいます。割り当てのタスクの1つでは、テキストファイルの文字数を測定するヒストグラム(これは基本的なコンソール出力で描画されます:http://img703.imageshack.us/img703/448/histogram.jpg)を作成する必要がありますこの割り当ての標準は1.3 MBです)。私はこのような機能を作った:この機能でCでメモリリークが発生しましたか?
int *yAxisAverageMethod(int average, int max, int min)
{
int *yAxis;
int i=0;
for (i=0;i<20;i++)
{
*(yAxis+i)=0;
}
/*
int length=sizeof(data)/sizeof(int);
*/
int lower_half_interval=average/10;
int upper_half_interval=(max-average)/10;
int current_y_value=min;
for (i=0;i<11;i++)
{
if (i==10){
*(yAxis+10)=average;
break;
}
*(yAxis+i)=current_y_value;
current_y_value+=lower_half_interval;
}
current_y_value+=average+upper_half_interval;
printf("Current y value:%d\n",current_y_value);
printf("Current max value:%d\n",max);
for (i=11;i<20;i++)
{
*(yAxis+i)=current_y_value;
current_y_value+=upper_half_interval;
}
return yAxis;
}
、Iはy軸を作るために、20個の整数の配列を返すつもり。私はすべての文字の平均を見つけ、それを表示するためにコンソールの20行を使用しました。下の10行は、文字の総量の平均値より低い値を表示するために使用され、10行は、上の部分を表示するために使用されます。下半分のy軸の各ステップは(平均 - 最小)/ 10で計算され、上部のy軸の各ステップは(最大 - 平均)/ 10によって計算されます。これはヒストグラムを描画する私の方法です。値の間にバリアントを表示したいからです。 mainメソッドで
、私は、この関数呼び出しがあります。私は、関数を実行したとき、私はセグメンテーションフォールトを得た
int *yAxis;
yAxis=yAxisAverageMethod(average,max,min);
を。ネットバンGCC++コンパイラでは、うまく動作します。 Howerver、大学のマシン(コマンドラインでコンパイルしてViで編集しなければならない)で実行したとき、私はエラーを受けました。 Netbeanには独自のメモリマネージャがあるので、それはそうだと思いますか?わかりません。
編集:私はマージソートについてお答えします。
別の質問にマージソートの部分を分割すると、混乱するだけです。 –
あなたは学習しているので、文章的なコメント:コードをインデントする方法を知っているまともなエディタを使用してください。あなたの 'for'ループが字下げされている方法は、読みづらいものです。 – nmichaels
いいえ、Netbeansにはメモリマネージャはありません。しかし、本当にそれらの関数ポインタが必要ですか?はいの場合は、少なくとも "int * yAxisAverageMethod(...)"の関数宣言を変更する必要があります。これは非常に珍しい構文です。しかし、メモリリークを見つけるためにvalgrind(memcheck)をチェックすることができます。あなたがC/C++でプログラムするならば、valgrindに心地よくなることは、とにかくいい考えです。;-) – Philip