v27 and above - Single Player Bug/Crashes report thread

Status
Not open for further replies.
I got this even. The only problem is that I am not Chief head Hunter. It then fell over. No save sorry I was testing something else.

Now see even in your attached game, :gold: now for some reason, is getting out of and??
 
I got this even. The only problem is that I am not Chief head Hunter. It then fell over. No save sorry I was testing something else.

Of course not. Chief Head Hunter is the leader of the Jivaro, I think it is, which was who split off from you via rebellion sometime in the past (or got those cities after they split off from you). He has decided that those two cities may rejoin you, if not they will split off from him anyway and form Mexico.

No idea why it would fall over.
 
HUGE error, pls correct. . .

In the autosaved game, IF you click on the "arrows" for checking city (now that we finally got them to work again), BUT they are not anymore for some reason, the games CTD as soon as i do so:(

SVN 4584, Huge map, marathon. (Attached autosavedgame plus Minidump, this is REPEATABLE.


EDIT:
No offense to whom ever made the changes BUT what the "heck" are all those words doing over in the hover area????? Not needed.(as far as i can tell?)
 
Of course not. Chief Head Hunter is the leader of the Jivaro, I think it is, which was who split off from you via rebellion sometime in the past (or got those cities after they split off from you). He has decided that those two cities may rejoin you, if not they will split off from him anyway and form Mexico.

No idea why it would fall over.

No one split off from me. Jivaro was in at the start of the game. He put a number of cities on an originally unpopulated island and then I conquered 4 barbarian cities in that island. The two cities were his but my culture has been pushing his culture back on those two which are isolated from all his other cities.
 
HUGE error, pls correct. . .

In the autosaved game, IF you click on the "arrows" for checking city (now that we finally got them to work again), BUT they are not anymore for some reason, the games CTD as soon as i do so:(

SVN 4584, Huge map, marathon. (Attached autosavedgame plus Minidump, this is REPEATABLE.


EDIT:
No offense to whom ever made the changes BUT what the "heck" are all those words doing over in the hover area????? Not needed.(as far as i can tell?)

The "words" are probably the display of the civic traits, this can be deactivated in BUG options - C2C tab - Show civic traits.

Main screen city arrow cycling also works fine for me. Rev 4584.
 
No one split off from me. Jivaro was in at the start of the game. He put a number of cities on an originally unpopulated island and then I conquered 4 barbarian cities in that island. The two cities were his but my culture has been pushing his culture back on those two which are isolated from all his other cities.

In that case that is also, in addition to the crash, a bug: the Revolutions code thinks they were yours. However it is deciding that must be wrong - presumably it is just checking the culture and since you have a lot (I assume) of culture there it is apparently deciding they used to be yours.
 
The "words" are probably the display of the civic traits, this can be deactivated in BUG options - C2C tab - Show civic traits.

Main screen city arrow cycling also works fine for me. Rev 4584.

Nope, just looked and i dont have on Display Civ Traits, sorry.
 
I can't answer to the first bug in that report, SO, but I CAN say... read the print at the bottom!

Hold down shift and mouseover the flag again. What's happening with all those words is you're cycling through your traits' descriptions. Each time you hold down shift and move the mouse back over the flag it will show a different trait. Only one trait will be expressed at a time and there is a middle setting where only the trait names will show (thus taking up next to no space at all in that popup display) that you will find in the cycle if you hold shift and repeat mousing over the flag.

The text display is coming out rather annoyingly (all those builds and buildings mentioned are the ones listing off with a new line after each and they are supposed to be separated by commas not hard returns) but my change to that must be on the code I'm running now that hasn't yet been updated. So that will improve and it shouldn't be stretching across the whole screen like that when a trait info is showing.

With the Developing Leaders trait, there is absolutely a need for accessing the trait informations, leader level, and progress reports to getting to the next level on the main screen somewhere. I chose the flag and as stated in the first post on the thread explaining those options, the Developing Leaders option overrides the Display Civ Traits BUG option off setting. However that setting is not entirely meaningless since if it remains off, the version display will still come up before the traits stuff.

I'd prefer to put the traits into button form somewhere on the main screen with a help popup for hovering over them but that'd take a bit (meaning a LOT) more python know-how than I've got.


Sorry for the confusion. Hydro pointed out I should've used some screen captures to explain all that and I was going to go in and get those but I've been caught up in projects since and forgotten to do so. I'll try to find time in the next day or two to show how to work that visually.
 
Huh? Does anyone know what could cause this error with the Debug DLL?
 

Attachments

  • Huh.PNG
    Huh.PNG
    13.8 KB · Views: 48
Could this be an effect from Alex Costa's problem in the SVN (and posted in the SVN thread)?

JosEPh
 
I figured out what was wrong with the Scaling City Limits. It turns out that the getGridWidth() and getGridHeight() return how many increments of 4 tiles the map has. So the limits were 1/16th (trunctated to an int) of what they should have been. :rolleyes: I'll be committing a fix later tonight and hopefully that will allow it to function as intended.
 
OK i now get it, thx, but couldn't you have this as the first hover over instead of the "full" one first, thx. Good nifty trick, i like.

Thanks! It did take some imagination to figure that one out. It'll look better when the commas on all those builds listed aren't taken as new lines. Will allow the full description of the trait to be much more compact and should fit almost all screens.

And it really should be the default setting to just show the names of the traits, so you must've accidentally held shift and mousedover when you weren't paying attention. I'm sure during play there's probably a lot of ways that could happen. In fact, after the next update, it will default back to the base setting every time there's a recalc done too.
 
I've done a bit of research on Hydro's bug. Now that I've merged the files it is in fact giving us a problem on the current svn. (Not in the code per se... I don't think so anyhow.)

It appears we have a problem in the routes structure somewhere.

This line comes up as the last reportable line in the call stack:
Code:
>	CvGameCoreDLL.dll!std::vector<CvRouteInfo *,std::allocator<CvRouteInfo *> >::iterator::operator+(int _Off=39)  Line 264 + 0xf bytes	C++

And this is the section it's pointing to in vector (I stopped copying this function where the call stack is pointing but it went on to have an actual issue in the exe itself of course):
Code:
// vector standard header
#pragma once
#ifndef _VECTOR_
#define _VECTOR_
#include <memory>
#include <stdexcept>

#pragma pack(push,8)
#pragma warning(push,3)

 #pragma warning(disable: 4244)

_STD_BEGIN
		// TEMPLATE CLASS _Vector_val
template<class _Ty, class _Alloc>
	class _Vector_val
	{	// base class for vector to hold allocator _Alval
protected:
	_Vector_val(_Alloc _Al = _Alloc())
		: _Alval(_Al)
		{	// construct allocator from _Al
		}

	typedef typename _Alloc::template
		rebind<_Ty>::other _Alty;

	_Alty _Alval;	// allocator object for values
	};

		// TEMPLATE CLASS vector
template<class _Ty,
	class _Ax = allocator<_Ty> >
	class vector
		: public _Vector_val<_Ty, _Ax>
	{	// varying size array of values
public:
	typedef vector<_Ty, _Ax> _Myt;
	typedef _Vector_val<_Ty, _Ax> _Mybase;
	typedef typename _Mybase::_Alty _Alloc;
	typedef _Alloc allocator_type;
	typedef typename _Alloc::size_type size_type;
	typedef typename _Alloc::difference_type _Dift;
	typedef _Dift difference_type;
	typedef typename _Alloc::pointer _Tptr;
	typedef typename _Alloc::const_pointer _Ctptr;
	typedef _Tptr pointer;
	typedef _Ctptr const_pointer;
	typedef typename _Alloc::reference _Reft;
	typedef _Reft reference;
	typedef typename _Alloc::const_reference const_reference;
	typedef typename _Alloc::value_type value_type;

  #define _ITER_BASE(it)	(it)._Myptr
		// CLASS const_iterator
	class const_iterator;
	friend class const_iterator;

	class const_iterator
		: public _Ranit<_Ty, _Dift, _Ctptr, const_reference>
		{	// iterator for nonmutable vector
	public:
		typedef random_access_iterator_tag iterator_category;
		typedef _Ty value_type;
		typedef _Dift difference_type;
		typedef _Ctptr pointer;
		typedef const_reference reference;

		const_iterator()
			{	// construct with null pointer
			_Myptr = 0;
			}

		const_iterator(_Tptr _Ptr)
			{	// construct with pointer _Ptr
			_Myptr = _Ptr;
			}

		const_reference operator*() const
			{	// return designated object


			return (*_Myptr);
			}

		_Ctptr operator->() const
			{	// return pointer to class object
			return (&**this);
			}

		const_iterator& operator++()
			{	// preincrement
			++_Myptr;
			return (*this);
			}

		const_iterator operator++(int)
			{	// postincrement
			const_iterator _Tmp = *this;
			++*this;
			return (_Tmp);
			}

		const_iterator& operator--()
			{	// predecrement
			--_Myptr;
			return (*this);
			}

		const_iterator operator--(int)
			{	// postdecrement
			const_iterator _Tmp = *this;
			--*this;
			return (_Tmp);
			}

		const_iterator& operator+=(difference_type _Off)
			{	// increment by integer
			_Myptr += _Off;
			return (*this);
			}

		const_iterator operator+(difference_type _Off) const
			{	// return this + integer
			const_iterator _Tmp = *this;
			return (_Tmp += _Off);
			}

		const_iterator& operator-=(difference_type _Off)
			{	// decrement by integer
			return (*this += -_Off);
			}

		const_iterator operator-(difference_type _Off) const
			{	// return this - integer
			const_iterator _Tmp = *this;
			return (_Tmp -= _Off);
			}

		difference_type operator-(const const_iterator& _Right) const
			{	// return difference of iterators


			return (_Myptr - _Right._Myptr);
			}

		const_reference operator[](difference_type _Off) const
			{	// subscript
			return (*(*this + _Off));
			}

		bool operator==(const const_iterator& _Right) const
			{	// test for iterator equality


			return (_Myptr == _Right._Myptr);
			}

		bool operator!=(const const_iterator& _Right) const
			{	// test for iterator inequality
			return (!(*this == _Right));
			}

		bool operator<(const const_iterator& _Right) const
			{	// test if this < _Right


			return (_Myptr < _Right._Myptr);
			}

		bool operator>(const const_iterator& _Right) const
			{	// test if this > _Right
			return (_Right < *this);
			}

		bool operator<=(const const_iterator& _Right) const
			{	// test if this <= _Right
			return (!(_Right < *this));
			}

		bool operator>=(const const_iterator& _Right) const
			{	// test if this >= _Right
			return (!(*this < _Right));
			}

		friend const_iterator operator+(difference_type _Off,
			const const_iterator& _Right)
			{	// return iterator + integer
			return (_Right + _Off);
			}


		_Tptr _Myptr;	// offset of element in vector
		};

		// CLASS iterator
	class iterator;
	friend class iterator;

	class iterator
		: public const_iterator
		{	// iterator for mutable vector
	public:
		typedef random_access_iterator_tag iterator_category;
		typedef _Ty value_type;
		typedef _Dift difference_type;
		typedef _Tptr pointer;
		typedef _Reft reference;

		iterator()
			{	// construct with null vector pointer
			}

		iterator(pointer _Ptr)
			: const_iterator(_Ptr)
			{	// construct with pointer _Ptr
			}

		reference operator*() const
			{	// return designated object
			return ((reference)**(const_iterator *)this);
			}

		_Tptr operator->() const
			{	// return pointer to class object
			return (&**this);
			}

		iterator& operator++()
			{	// preincrement
			++this->_Myptr;
			return (*this);
			}

		iterator operator++(int)
			{	// postincrement
			iterator _Tmp = *this;
			++*this;
			return (_Tmp);
			}

		iterator& operator--()
			{	// predecrement
			--this->_Myptr;
			return (*this);
			}

		iterator operator--(int)
			{	// postdecrement
			iterator _Tmp = *this;
			--*this;
			return (_Tmp);
			}

		iterator& operator+=(difference_type _Off)
			{	// increment by integer
			this->_Myptr += _Off;
			return (*this);
			}

		iterator operator+(difference_type _Off) const
			{	// return this + integer
			iterator _Tmp = *this;
			return (_Tmp += _Off);
			}

From all this I am led to believe some recent change in our Improvements, particularly among routes, is causing trouble. It MAY be trouble that's due to his particular game gaining a lot of new land out of the ocean tiles but since it loads before any recent code changes (except perhaps for ls612's recent stuff which I don't THINK has much to do with anything) I'm suspicious of any Improvement info changes made recently.

@Hydro: You could help us by finding the exact revision that it starts crashing at. The change causing trouble is somewhere in that revision.

So unfortunately, this means my update won't fix Hydro's save but we ARE a step closer at figuring out what's wrong.

@Koshling: If you're reading this, do you have any insight as to what this bug report could be pointing at?
 
Playing latest version of C2C (perfect world, immense, eons, limited religions on, divine prophets on) i notice AGAIN bug/flaw in AI behavior that is in game for a few months at least: Wilhelmina is another top civ on my continent and she tries to research EVERY religion tech, falling bad behind me. And she did not start any religion yet ... She researches Jainism now, i research Drama.

Otherwise new C2C is very sweet. Keep up good work guys, i cant wait to see new engine without vewport limits to play my favourite big maps.
 
I've done a bit of research on Hydro's bug. Now that I've merged the files it is in fact giving us a problem on the current svn. (Not in the code per se... I don't think so anyhow.)

It appears we have a problem in the routes structure somewhere.

This line comes up as the last reportable line in the call stack:
Code:
>	CvGameCoreDLL.dll!std::vector<CvRouteInfo *,std::allocator<CvRouteInfo *> >::iterator::operator+(int _Off=39)  Line 264 + 0xf bytes	C++

And this is the section it's pointing to in vector (I stopped copying this function where the call stack is pointing but it went on to have an actual issue in the exe itself of course):
Code:
// vector standard header
#pragma once
#ifndef _VECTOR_
#define _VECTOR_
#include <memory>
#include <stdexcept>

#pragma pack(push,8)
#pragma warning(push,3)

 #pragma warning(disable: 4244)

_STD_BEGIN
		// TEMPLATE CLASS _Vector_val
template<class _Ty, class _Alloc>
	class _Vector_val
	{	// base class for vector to hold allocator _Alval
protected:
	_Vector_val(_Alloc _Al = _Alloc())
		: _Alval(_Al)
		{	// construct allocator from _Al
		}

	typedef typename _Alloc::template
		rebind<_Ty>::other _Alty;

	_Alty _Alval;	// allocator object for values
	};

		// TEMPLATE CLASS vector
template<class _Ty,
	class _Ax = allocator<_Ty> >
	class vector
		: public _Vector_val<_Ty, _Ax>
	{	// varying size array of values
public:
	typedef vector<_Ty, _Ax> _Myt;
	typedef _Vector_val<_Ty, _Ax> _Mybase;
	typedef typename _Mybase::_Alty _Alloc;
	typedef _Alloc allocator_type;
	typedef typename _Alloc::size_type size_type;
	typedef typename _Alloc::difference_type _Dift;
	typedef _Dift difference_type;
	typedef typename _Alloc::pointer _Tptr;
	typedef typename _Alloc::const_pointer _Ctptr;
	typedef _Tptr pointer;
	typedef _Ctptr const_pointer;
	typedef typename _Alloc::reference _Reft;
	typedef _Reft reference;
	typedef typename _Alloc::const_reference const_reference;
	typedef typename _Alloc::value_type value_type;

  #define _ITER_BASE(it)	(it)._Myptr
		// CLASS const_iterator
	class const_iterator;
	friend class const_iterator;

	class const_iterator
		: public _Ranit<_Ty, _Dift, _Ctptr, const_reference>
		{	// iterator for nonmutable vector
	public:
		typedef random_access_iterator_tag iterator_category;
		typedef _Ty value_type;
		typedef _Dift difference_type;
		typedef _Ctptr pointer;
		typedef const_reference reference;

		const_iterator()
			{	// construct with null pointer
			_Myptr = 0;
			}

		const_iterator(_Tptr _Ptr)
			{	// construct with pointer _Ptr
			_Myptr = _Ptr;
			}

		const_reference operator*() const
			{	// return designated object


			return (*_Myptr);
			}

		_Ctptr operator->() const
			{	// return pointer to class object
			return (&**this);
			}

		const_iterator& operator++()
			{	// preincrement
			++_Myptr;
			return (*this);
			}

		const_iterator operator++(int)
			{	// postincrement
			const_iterator _Tmp = *this;
			++*this;
			return (_Tmp);
			}

		const_iterator& operator--()
			{	// predecrement
			--_Myptr;
			return (*this);
			}

		const_iterator operator--(int)
			{	// postdecrement
			const_iterator _Tmp = *this;
			--*this;
			return (_Tmp);
			}

		const_iterator& operator+=(difference_type _Off)
			{	// increment by integer
			_Myptr += _Off;
			return (*this);
			}

		const_iterator operator+(difference_type _Off) const
			{	// return this + integer
			const_iterator _Tmp = *this;
			return (_Tmp += _Off);
			}

		const_iterator& operator-=(difference_type _Off)
			{	// decrement by integer
			return (*this += -_Off);
			}

		const_iterator operator-(difference_type _Off) const
			{	// return this - integer
			const_iterator _Tmp = *this;
			return (_Tmp -= _Off);
			}

		difference_type operator-(const const_iterator& _Right) const
			{	// return difference of iterators


			return (_Myptr - _Right._Myptr);
			}

		const_reference operator[](difference_type _Off) const
			{	// subscript
			return (*(*this + _Off));
			}

		bool operator==(const const_iterator& _Right) const
			{	// test for iterator equality


			return (_Myptr == _Right._Myptr);
			}

		bool operator!=(const const_iterator& _Right) const
			{	// test for iterator inequality
			return (!(*this == _Right));
			}

		bool operator<(const const_iterator& _Right) const
			{	// test if this < _Right


			return (_Myptr < _Right._Myptr);
			}

		bool operator>(const const_iterator& _Right) const
			{	// test if this > _Right
			return (_Right < *this);
			}

		bool operator<=(const const_iterator& _Right) const
			{	// test if this <= _Right
			return (!(_Right < *this));
			}

		bool operator>=(const const_iterator& _Right) const
			{	// test if this >= _Right
			return (!(*this < _Right));
			}

		friend const_iterator operator+(difference_type _Off,
			const const_iterator& _Right)
			{	// return iterator + integer
			return (_Right + _Off);
			}


		_Tptr _Myptr;	// offset of element in vector
		};

		// CLASS iterator
	class iterator;
	friend class iterator;

	class iterator
		: public const_iterator
		{	// iterator for mutable vector
	public:
		typedef random_access_iterator_tag iterator_category;
		typedef _Ty value_type;
		typedef _Dift difference_type;
		typedef _Tptr pointer;
		typedef _Reft reference;

		iterator()
			{	// construct with null vector pointer
			}

		iterator(pointer _Ptr)
			: const_iterator(_Ptr)
			{	// construct with pointer _Ptr
			}

		reference operator*() const
			{	// return designated object
			return ((reference)**(const_iterator *)this);
			}

		_Tptr operator->() const
			{	// return pointer to class object
			return (&**this);
			}

		iterator& operator++()
			{	// preincrement
			++this->_Myptr;
			return (*this);
			}

		iterator operator++(int)
			{	// postincrement
			iterator _Tmp = *this;
			++*this;
			return (_Tmp);
			}

		iterator& operator--()
			{	// predecrement
			--this->_Myptr;
			return (*this);
			}

		iterator operator--(int)
			{	// postdecrement
			iterator _Tmp = *this;
			--*this;
			return (_Tmp);
			}

		iterator& operator+=(difference_type _Off)
			{	// increment by integer
			this->_Myptr += _Off;
			return (*this);
			}

		iterator operator+(difference_type _Off) const
			{	// return this + integer
			iterator _Tmp = *this;
			return (_Tmp += _Off);
			}

From all this I am led to believe some recent change in our Improvements, particularly among routes, is causing trouble. It MAY be trouble that's due to his particular game gaining a lot of new land out of the ocean tiles but since it loads before any recent code changes (except perhaps for ls612's recent stuff which I don't THINK has much to do with anything) I'm suspicious of any Improvement info changes made recently.

@Hydro: You could help us by finding the exact revision that it starts crashing at. The change causing trouble is somewhere in that revision.

So unfortunately, this means my update won't fix Hydro's save but we ARE a step closer at figuring out what's wrong.

@Koshling: If you're reading this, do you have any insight as to what this bug report could be pointing at?

It just means there's a memory corruption that has trampled on the memory for that vector. Most likely something is indexing out-of-bounds in some array, but there's no real way to know what from this - it whatever happened to be allocated next to the vector at the time which could be anything essentially. Any changes to use of a (heap allocated) array recently would be the likely culprit.
 
Status
Not open for further replies.
Top Bottom