我目前正在學習使用C編程。在我的任務中的一項任務中,我必須製作一個柱狀圖(通過基本控制檯輸出繪製,如下所示: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;
}
在這個函數中,我打算要返回的20個整數的數組,以使y軸。我找到所有字符的平均值,然後使用20行控制檯來顯示它。低10行用於顯示總字符數低於平均值的數量,用10行顯示高位部分。下半部分的y軸的每一步計算方法爲(平均 - 分鐘)/ 10,上半部分的y軸中的每一步計算(最大 - 平均)/ 10。這是我繪製直方圖的方法,因爲我想顯示值之間的變體。
在main方法,我有這樣的函數調用:
int *yAxis;
yAxis=yAxisAverageMethod(average,max,min);
我得到一個分段錯誤,當我跑的功能。在netbean GCC++編譯器中,它工作正常。 Howerver,當我在大學機器上運行它時(我必須在命令行編譯並在Vi中編輯),我得到了錯誤。我猜這是因爲Netbean有自己的內存管理器?我不明白。
編輯:我會問關於合併排序在其他問題。
將合併排序部分拆分成另一個問題,否則它會變得令人困惑 – 2010-11-18 14:37:48
既然你在學習,那麼就需要一種文體上的評論:使用一個體面的編輯器知道如何爲你縮進代碼。你的'for'循環縮進的方式讓人難以理解。 – nmichaels 2010-11-18 14:38:53
不,Netbeans不會爲您提供內存管理器。但是你真的需要這些函數指針嗎?如果是,至少應該在頂部更改函數聲明,「int * yAxisAverageMethod(...)」是非常不尋常的語法。但要找到內存泄漏,你可以檢查valgrind(memcheck)。如果你使用C/C++進行編程,那麼無論如何都可以使用valgrind來獲得適應性...... ;-) – Philip 2010-11-18 14:39:52