By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,742 Members | 773 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,742 IT Pros & Developers. It's quick & easy.

Usage of rdbuf

P: n/a
Hi.

I have a piece of code that can be compiled and linked both with
Cygwin g++ and with VC++. The code is:

//WORKS WITH CYGWIN G++
//BUT NOT WITH CL.EXE (VC++) (compiles, but error when executed)
//################################
#include <iostream>
#include <sstream>
using namespace std;

int main ()
{

int val;
string mystr;
stringstream ss (stringstream::in | stringstream::out);

cout.rdbuf(ss.rdbuf()); //Is this ok to do?
cout << "120 42 377 6 5 2000";

//If the two lines above are replaced with
//this line it works fine with both
//g++ and VC++:
//ss << "120 42 377 6 5 2000";

for (int n=0; n<6; n++)
{
ss >> val;
cerr << val*2 << '\n';
}

cerr << "Hello World! " << endl;
return 0;
}
//################################

My problem is that during run time the exe-file that was created with
Cygwin g++ (3.3.1) works fine, but the exe-file that was created with
VC++ 6.0 crashes.

Here is the error message:
The instruction at "0x00402f7f" referenced memory at "0x0000000sd".
The memory could not be "read".
Is there any errors in my code, or do I do something I'm not allowed
to?
Since it works in Cygwin g++, but not in VC++ 6.0 I think this is
really strange, since I believe that my code is 100% ANSI-C++ code. Or
is it?

I compile with:
G++: g++ test.cpp
VC++: cl /GX /TP test.cpp (also compiled with the entire VC++
development GUI)

I'm thankful for any information that might help me with this problem.

/Omid
Jul 22 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a

"Omid" <n_********@hotmail.com> wrote in message
news:77**************************@posting.google.c om...
Hi.

I have a piece of code that can be compiled and linked both with
Cygwin g++ and with VC++. The code is:

//WORKS WITH CYGWIN G++
//BUT NOT WITH CL.EXE (VC++) (compiles, but error when executed)
//################################
#include <iostream>
#include <sstream>
using namespace std;

int main ()
{

int val;
string mystr;
stringstream ss (stringstream::in | stringstream::out);

cout.rdbuf(ss.rdbuf()); //Is this ok to do?
cout << "120 42 377 6 5 2000";

//If the two lines above are replaced with
//this line it works fine with both
//g++ and VC++:
//ss << "120 42 377 6 5 2000";

for (int n=0; n<6; n++)
{
ss >> val;
cerr << val*2 << '\n';
}

cerr << "Hello World! " << endl;
return 0;
}
//################################

My problem is that during run time the exe-file that was created with
Cygwin g++ (3.3.1) works fine, but the exe-file that was created with
VC++ 6.0 crashes.

Here is the error message:
The instruction at "0x00402f7f" referenced memory at "0x0000000sd".
The memory could not be "read".
Is there any errors in my code, or do I do something I'm not allowed
to?
Since it works in Cygwin g++, but not in VC++ 6.0 I think this is
really strange, since I believe that my code is 100% ANSI-C++ code. Or
is it?

I compile with:
G++: g++ test.cpp
VC++: cl /GX /TP test.cpp (also compiled with the entire VC++
development GUI)

I'm thankful for any information that might help me with this problem.

/Omid


You must restore the old buffer before you exit.

streambuf* save_buffer = cout.rdbuf(ss.rdbuf()); //Is this ok to do?
cout << "120 42 377 6 5 2000";
cout.rdbuf(save_buffer);

john

Jul 22 '05 #2

P: n/a
"Omid" <n_********@hotmail.com> wrote in message
news:77**************************@posting.google.c om...
Hi.

I have a piece of code that can be compiled and linked both with
Cygwin g++ and with VC++. The code is:

//WORKS WITH CYGWIN G++
//BUT NOT WITH CL.EXE (VC++) (compiles, but error when executed)
//################################
#include <iostream>
#include <sstream>
using namespace std;

int main ()
{

int val;
string mystr;
stringstream ss (stringstream::in | stringstream::out);

cout.rdbuf(ss.rdbuf()); //Is this ok to do?
cout << "120 42 377 6 5 2000";

//If the two lines above are replaced with
//this line it works fine with both
//g++ and VC++:
//ss << "120 42 377 6 5 2000";

for (int n=0; n<6; n++)
{
ss >> val;
cerr << val*2 << '\n';
}

cerr << "Hello World! " << endl;
return 0;
}
//################################

My problem is that during run time the exe-file that was created with
Cygwin g++ (3.3.1) works fine, but the exe-file that was created with
VC++ 6.0 crashes.

Here is the error message:
The instruction at "0x00402f7f" referenced memory at "0x0000000sd".
The memory could not be "read".
Is there any errors in my code, or do I do something I'm not allowed
to?
Since it works in Cygwin g++, but not in VC++ 6.0 I think this is
really strange, since I believe that my code is 100% ANSI-C++ code. Or
is it?

I compile with:
G++: g++ test.cpp
VC++: cl /GX /TP test.cpp (also compiled with the entire VC++
development GUI)

I'm thankful for any information that might help me with this problem.

/Omid


I just tried with VS.NET and it compiles and runs cleanly. You can download
the compiler for free http://msdn.microsoft.com/visualc/vctoolkit2003/.

Jul 22 '05 #3

P: n/a
"John Harrison" <jo*************@hotmail.com> wrote in message news:<2m************@uni-berlin.de>...
"Omid" <n_********@hotmail.com> wrote in message
news:77**************************@posting.google.c om...
Hi.

I have a piece of code that can be compiled and linked both with
Cygwin g++ and with VC++. The code is:

//WORKS WITH CYGWIN G++
//BUT NOT WITH CL.EXE (VC++) (compiles, but error when executed)
//################################
#include <iostream>
#include <sstream>
using namespace std;

int main ()
{

int val;
string mystr;
stringstream ss (stringstream::in | stringstream::out);

cout.rdbuf(ss.rdbuf()); //Is this ok to do?
cout << "120 42 377 6 5 2000";

//If the two lines above are replaced with
//this line it works fine with both
//g++ and VC++:
//ss << "120 42 377 6 5 2000";

for (int n=0; n<6; n++)
{
ss >> val;
cerr << val*2 << '\n';
}

cerr << "Hello World! " << endl;
return 0;
}
//################################

My problem is that during run time the exe-file that was created with
Cygwin g++ (3.3.1) works fine, but the exe-file that was created with
VC++ 6.0 crashes.

Here is the error message:
The instruction at "0x00402f7f" referenced memory at "0x0000000sd".
The memory could not be "read".
Is there any errors in my code, or do I do something I'm not allowed
to?
Since it works in Cygwin g++, but not in VC++ 6.0 I think this is
really strange, since I believe that my code is 100% ANSI-C++ code. Or
is it?

I compile with:
G++: g++ test.cpp
VC++: cl /GX /TP test.cpp (also compiled with the entire VC++
development GUI)

I'm thankful for any information that might help me with this problem.

/Omid


You must restore the old buffer before you exit.

streambuf* save_buffer = cout.rdbuf(ss.rdbuf()); //Is this ok to do?
cout << "120 42 377 6 5 2000";
cout.rdbuf(save_buffer);

john


Thanks John!

That solved my problem.
/Omid
Jul 22 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.