Hi guys:

I wrote this simple code to read a series of numbers from a list and then do some simple aremathic with it. I am not certain where the error could be, I read the code upside down and still can understand where the error lies. Any help would be greatly appreciated.

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int averageResult(int average, int imageCount)
	ifstream in("objv.sky");
	ofstream out("objv.skyc");
	string image;
	int npix;
	double mean, stddev, min,forSum,sum,avgPct;
	vector<double> max (imageCount);
	int subtractionNumber[imageCount];
	getline(in, image); //to skip header
	for (int i=0;i<imageCount;i++) 
		if (in >> image >> npix >> mean >> stddev >> min >> max[i])
			subtractionNumber[i] = average - max[i];

int main()
	ifstream in("objv.sky");
	ofstream out("objv.skyc");
	string image;
	int npix,imageCount;
	double mean, stddev, min,forSum,sum,average,avgPct;
	vector<double> max (imageCount);
	vector<double> imageDiff (imageCount);
	getline(in, image); //to skip the header
	cout << "How many images in the list: ";
	cin >> imageCount;
	for(int i=0;i<imageCount;i++)
		if(in >> image >> npix >> mean>> stddev >> min >> max[i])
				cout <<"["<<i+1<<"] "<< max[i] << "\n";
				sum += max[i];
	average = sum/imageCount;
	cout << "The average is : " << average << "\n";
	cout << averageResult(average,imageCount) << "\n";
	return 0;

The error

% g++ -o test test.cpp
% ./test
How many images in the list: 5
Segmentation fault

The file is reading

 0b.imh   1048576 1984.        490.1    1870.    65535.
 3c.imh   1048576 1984.        471.      1875.    65446.
 4g.imh   1048576 1984.        479.1    1872.    65335.
 3s.imh   1048576 1984.        473.8    1869.    65535.
 1z.imh   1048576 1984.        476.3    1869.    65522.
Re: Segmentation fault 80 80

Use the debugger, it'll take just a minute to find the problem.
Compile with g++ -g -o test test.cpp to include debug information, then run
gdb test

And enter the commands start, then continue.
When it stops due to the segmentation fault, type "where".

Re: Segmentation fault 80 80

The problem is that, when you initialize max, imageCount hasn't yet been assigned. Your compiler is probably defaulting it to zero (although this isn't guaranteed), which means max has size == 0. Then when you try to access it in your loop, you're accessing outside the bounds of the container, causing a segfault.

In general, if you're segfaulting, look for an access outside the bounds of an array or container. This is the usual culprit.

Re: Segmentation fault 80 80

I ran gdb but all i get is this, which leaves me at the same place:

(gdb) start
Breakpoint 1 at 0x100000b0f: file test.cpp, line 24.
Starting program: /Users/gcardonav/Desktop/n6388/02sep09/Raw/test 
Reading symbols for shared libraries ++. done

Breakpoint 1, main () at test.cpp:24
24      int main()
Re: Segmentation fault 80 80

Yeah, when you get there, enter "continue" (or just "c").

Re: Segmentation fault 80 80

Thanks you guys, I was able to run my code once again.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.19 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.