C++でファイルデータを読み込み平均を出すプログラム

私、学校ではネットワークの研究をしています。

今は先生に書いていただいたプログラムを実行して結果を得、分析するといったスタンスで行っています。
でも、今後も研究をやっていくうえでいつまでも先生に頼ってばかりはいられません。そこで、今はC++Rubyという2つの言語について独学中です。
今日はどんなことやっているのかちらっとお見せします。
というかこのプログラム、間違ってます
答がどうも合わない…「詳しい方、助けてください」の意味も込めて書いていきますw

このプログラムは、ファイルの数値を読み込んで平均を出そうとしています

#include
#include
#include
using namespace std;

int main(int argc, char* argv[])
{
ifstream fin;
string ss;

if(argc != 2){
cout << "average fromfile tofile\n";
return 1;
}

fin.open(argv[1]);
if (!fin){
cout << "input file don't open\n";
return 1;
}

char buf[256];

int linenum = 0;

while(fin.getline(buf,sizeof(buf))){
linenum++;
}

cerr << "readline is " << linenum << "\n";

fin.clear();
fin.seekg(0,ios::beg);

double *arr;
arr = new double[linenum];

for(int i=0; i
fin.getline(buf,sizeof(buf));
arr[i] = atof(buf);
}

int j;
double ave,sum;

while(j < linenum){
sum = sum + arr[j];
j++;
}

cout << "sum= " << sum << '\n';

ave = sum/linenum;

cout << "ave= " << ave << '\n';

return 0;
}

読み込んでいるファイルは100行1列の数値からなるcsvファイルです。

真の結果は
171.514

ですが、私のプログラムを実行すると

readline is 100
sum= 8418.2
ave= 84.182

という結果になります
何がダメなのかさっぱりですし、寝ますw

あと半年くらいでそれなりにかけるようになりたいのですが、この程度でつまづいているようでは先が思いやられます><

追記
int j;
double ave,sum;

while(j < linenum){
sum = sum + arr[j];
j++;
}
のint j;を
int j = 0;にしたところ、うまくできました!