Sign in to follow this  
noatom

Help finding bug in code

Recommended Posts

Say I have:

class errorManager{
private:
vector<string> n1;
vector<string>n2;
std::string name;

public:
errorManager() { name = test.txt; }
void addtext(std::string first,std::string second){
ofstream file;
    file.open (name, ios::out | ios::app);
    

    file << error << endl;
    file << endl;
    file << error_desc;
    file << endl;

n1.push_back(first);
n2.push_back(second);
    file.close();
}
};

and I have another class that just has a member of one of the above types.That class contains a function,that simply calls addtext("t","t")

Both classes are placed in a dll and have ALL their functions __declspec(dllexport)

 

STILL if I create a project,include only the errorManager dll,create an object of that type and call addtext("t","t") i get NO error!

 

This is where the error redirects me:

	if (_Inside(_Ptr))
		return (assign(*this, _Ptr - _Myptr(), _Count));	// substring

		if (_Grow(_Count))
			{	// make room and assign new stuff
			_Traits::copy(_Myptr(), _Ptr, _Count);
			_Eos(_Count);
			}
		return (*this);
		}

The error: Microsoft Visual Studio C Runtime Library has detected a fatal error ...

Edited by noatom

Share this post


Link to post
Share on other sites
In visual studio there is a window called the "call stack". It shows you the nested calls that were made that resulted in your crash.

You are crashing in STL which by itself isn't really helpful usually. What you want to know is what code you actually wrote is calling the STL and causing the crash.

Share this post


Link to post
Share on other sites
 	msvcr100.dll!70b3af8a() 	
 	msvcr100.dll!70b13d1e() 	
 	msvcp100.dll!70b82286() 	
 	msvcp100.dll!70b82337() 	
>	error_manager.dll!std::basic_filebuf<char,std::char_traits<char> >::open(const char * _Filename, int _Mode, int _Prot)  Line 220 + 0x19 bytes	C++
 	error_manager.dll!errorManager::add_error(std::basic_string<char,std::char_traits<char>,std::allocator<char> > error, std::basic_string<char,std::char_traits<char>,std::allocator<char> > error_desc)  Line 68 + 0x1b bytes	C++
 	test0.exe!WinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, char * lpCmdLine, int iCmdShow)  Line 97	C++
 	test0.exe!__tmainCRTStartup()  Line 547 + 0x1c bytes	C
 	kernel32.dll!76a33c45() 	
 	ntdll.dll!76e437f5() 	
 	ntdll.dll!76e437c8() 	

test0 is the name of the project in which i'm testing all this stuff.Notice the arrow here:

>    error_manager.dll!std::basic_filebuf<char,std::char_traits<char> >::open(const char * _Filename, int _Mode, int _Prot) Line 220 + 0x19 bytes    C++

 

FORGOT TO ADD: There are 2 vector<string> inside that class,they both get a new item when addtext is called(edited the first post code)

Edited by noatom

Share this post


Link to post
Share on other sites

Yes,the file is created and text is added to it,no problems.

 

SiCrane,not sure what you mean.This is probably my first adventure in dll land.Can you explain a little? 

Share this post


Link to post
Share on other sites
Can you post the calling code?

Also where are you exporting the add_text method ? I am wondering if it is inlining it in your app and causing dll boundary problems. Templates and dlls can be quite a pain to keep in check.

Share this post


Link to post
Share on other sites
errorManager x;
x.set_errorfile("ia.txt");
x.add_error("sada","dsadsa");

That one works just fine.

 

This one however:

clstext y;
y.addtext("s","s");

I did not call the seterrorfile function since the default constructor sets one.

 

 

In the original project I never define any functions in the header file.In the header file I just have the declarations with the __declspec(dllexport)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this