NEED ASSISTANCE WITH ERRORS

The following code is giving me the following error

Error description : Unhandled exception at 0x00DC5D81 in ImageComponent2.exe: 0xC0000005: Access violation reading location 0xCDCDCDD5.

// ImageComponents


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// ImageComponents

#include <iostream>
#include "Position.h"

using namespace std;

void labelComponents(int size, int **pixel);
void outputImage(int size, int **pixel);

int main(){

	int size = 0;

	cout << "Enter image size: ";
	cin >> size;

	int ** pixel = new int *[size + 2];
	for (int i = 1; i <= size; i++)
	{
		pixel[i] = new int[size + 2];
	}

	cout << "Enter the pixel array in row-major order:\n";
	for (int i = 1; i <= size; i++)
		for (int j = 1; j <= size; j++)
		{
			cin >> pixel[i][j];
		}

	labelComponents(size, pixel);
	outputImage(size, pixel);


	system("pause");
	return (0);
}


void labelComponents(int size, int **pixel){
	// initialize offsets
	Position * offset = new Position[4];
	offset[0] = Position(0, 1);   // right
	offset[1] = Position(1, 0);   // down
	offset[2] = Position(0, -1);  // left
	offset[3] = Position(-1, 0);  // up

	int numNbr = 4; // neighbors of a pixel position
	Position * nbr = new Position(0, 0);
	Position * Q = new Position[size * size];
	int id = 1;  // component id
	int x = 0; // (Position Q)

	// scan all pixels labeling components
	for (int r = 1; r <= size; r++)      // row r of image
		for (int c = 1; c <= size; c++)   // column c of image
		{
			if (pixel[r][c] == 1)
			{// new component
				pixel[r][c] = ++id; // get next id
				Position * here = new Position(r, c);

				do
				{// find rest of component
					for (int i = 0; i < numNbr; i++)
					{// check all neighbors of here
						nbr->setRow(here->getRow() + offset[i].getRow());

						nbr->setCol(here->getCol() + offset[i].getCol());

						if (pixel[nbr->getRow()][nbr->getCol()] == 1)
						{// pixel is part of current component
							pixel[nbr->getRow()][nbr->getCol()] = id;
							Q[x] = *nbr; 
							x++;
						}
					}
					// any unexplored pixels in component?
					*here = Q[x]; // a component pixel
					x--;
				} while (here != NULL);
			} // end of if, for c, and for r
		}
} // end of labelComponents

void outputImage(int size, int **pixel){
	cout << "The labeled image is: ";
	for (int i = 1; i <= size; i++){
		cout << endl;
		for (int j = 1; j <= size; j++)
			cout << pixel[i][j] << " ";
	}
} // end of outputImage


// Position

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#ifndef POSITION_H
#define POSITION_H

class Position 
{
private:
	
	int row;   // row number of the position
	int col;
	// column number of the position

public:
	Position(); // default
	Position( int theRow, int theCol); // parameter
	Position(const Position & aPosition); // copy
	Position & operator = (const Position & aPosition); // overload =
	
	// overload =

	// mutators
	void setRow (int r);
	void setCol (int c);
	//accessors
	int getRow() const;
	int getCol() const;
}; // end Position

Position::Position()
{
	setRow(0);
	setCol(0);
}

Position::Position(int r, int c)
{
	setRow(r);
	setCol(c);
}

Position::Position(const Position & aPosition)
{
	setRow(aPosition.row);
	setCol(aPosition.col);
}

Position & Position::operator=(const Position & aPosition)
{
	this->row=aPosition.row;
	this->col=aPosition.col;
	return(*this);
}

void Position::setRow(int r)
{
	this->row = r;
}
void Position::setCol(int c)
{
	this->col = c;
}
int Position::getRow() const
{
	return this->row;
}
int Position::getCol() const
{
	return this->col;
}

#endif 
I would advise stepping through the code with a debugger, to identify which line is causing the crash.
Line 81 (ImageComponents): here will never be NULL while x might become negative.
Topic archived. No new replies allowed.