Jump to content

  • Log In with Google      Sign In   
  • Create Account


Help finding bug in code


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
11 replies to this topic

#1 noatom   Members   -  Reputation: 782

Like
0Likes
Like

Posted 03 August 2013 - 10:22 AM

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, 03 August 2013 - 11:22 AM.


Sponsor:

#2 Apoxol   Members   -  Reputation: 153

Like
0Likes
Like

Posted 03 August 2013 - 10:57 AM

What is the stack from the crash?

What is test.txt?

#3 noatom   Members   -  Reputation: 782

Like
0Likes
Like

Posted 03 August 2013 - 11:06 AM

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?



#4 Apoxol   Members   -  Reputation: 153

Like
0Likes
Like

Posted 03 August 2013 - 11:13 AM

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.

#5 noatom   Members   -  Reputation: 782

Like
0Likes
Like

Posted 03 August 2013 - 11:18 AM

 	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, 03 August 2013 - 11:23 AM.


#6 Dragonsoulj   Crossbones+   -  Reputation: 2086

Like
0Likes
Like

Posted 03 August 2013 - 11:28 AM


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?



#7 SiCrane   Moderators   -  Reputation: 9559

Like
0Likes
Like

Posted 03 August 2013 - 11:35 AM

Did you export the template classes you are using?



#8 noatom   Members   -  Reputation: 782

Like
0Likes
Like

Posted 03 August 2013 - 11:39 AM

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? 



#9 Apoxol   Members   -  Reputation: 153

Like
0Likes
Like

Posted 03 August 2013 - 11:50 AM

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.

#10 noatom   Members   -  Reputation: 782

Like
0Likes
Like

Posted 03 August 2013 - 11:55 AM

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)



#11 SiCrane   Moderators   -  Reputation: 9559

Like
2Likes
Like

Posted 03 August 2013 - 11:57 AM

How to export an instantiation of a Standard Template Library (STL) class and a class that contains a data member that is an STL object

#12 noatom   Members   -  Reputation: 782

Like
0Likes
Like

Posted 03 August 2013 - 12:10 PM

 

That solved the problem,thanks a lot man.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS