Stack around the variable was corrupted.

So this is my code:

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
HRESULT CSerializer::Deserialize_CBaseMap( CBaseMap &map, CONST CHAR *filename )
{
	ifstream ifs( filename, ios::binary );

	if( ifs )
	{
		CHAR sizebuffer = '0';
		INT32 size = 0, i;

		vector<CBaseObject> vobj;
		
		ifs.read( &sizebuffer, sizeof( INT32 ) );
		size = atoi( &sizebuffer );

		CBaseObject *oa = new CBaseObject[size];
		ifs.read( (CHAR*)oa, sizeof( *oa ) );
		for( i = 0; i < size; i++ )
		{
			vobj.push_back( oa[i] );
		}

		map.Objects = vobj;
		
		return S_OK;
	}

	return E_FAIL;
}


Strangely, it crashes after the return.
Maybe because I'm using char instead of char * for sizebuffer?

When I change sizebuffer to a char *, it does not read.

Any thoughts?
Last edited on
I've fixed the problem, actually.

Anyone who is wondering, this is the solution:

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
HRESULT CSerializer::Deserialize_CBaseMap( CBaseMap &map, CONST CHAR *filename )
{
	ifstream ifs( filename, ios::binary );

	if( ifs )
	{
		CHAR sizebuffer[4] = { 'T', 'e', 's', 't' };
		INT32 size = 0, i;

		vector<CBaseObject> vobj;
		
		ifs.read( sizebuffer, sizeof( INT32 ) );
		size = atoi( sizebuffer );

		CBaseObject *oa = new CBaseObject[size];
		ifs.read( (CHAR*)oa, sizeof( *oa ) );
		for( i = 0; i < size; i++ )
		{
			vobj.push_back( oa[i] );
		}

		map.Objects = vobj;
		
		return S_OK;
	}

	return E_FAIL;
};
Topic archived. No new replies allowed.