Help finding bug in code

Started by
10 comments, last by noatom 10 years, 8 months ago

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 ...

Advertisement
What is the stack from the crash?

What is test.txt?

I ment name = "test.txt"; that is the name of the file where it should output text.

And by stack from the crash what do you exactly mean?

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.

 	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)


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!

You say you get no error, does it work? Does it add text to a file for you?

Did you export the template classes you are using?

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?

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.

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)

This topic is closed to new replies.

Advertisement