Hi
I am getting this error when running a very similar code like the
below, it is made for illustration only.
thanks
***************************************
**************** error ****************
(gdb) n
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
Program received signal SIGABRT, Aborted.
0xb7cd17c7 in raise () from /lib/tls/libc.so.6
(gdb) bt
#0 0xb7cfa7c7 in raise () from /lib/tls/libc.so.6
#1 0xb7cfc06b in abort () from /lib/tls/libc.so.6
#2 0xb7eef644 in __gnu_cxx::__verbose_terminate_handler ()
from /usr/lib/libstdc++.so.6
#3 0xb7eed035 in std::set_unexpected () from /usr/lib/libstdc++.so.6
#4 0xb7eed072 in std::terminate () from /usr/lib/libstdc++.so.6
#5 0xb7eed1aa in __cxa_throw () from /usr/lib/libstdc++.so.6
#6 0xb7eed5eb in operator new () from /usr/lib/libstdc++.so.6
#7 0x0804d28b in __gnu_cxx::new_allocator<fxpair>::allocate (
this=0xbff45c7c, __n=27531841)
at /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/ext/new_allocator.h:88
#8 0x0804d2b0 in std::_Vector_base<fxpair, std::allocator<fxpair::_M_allocate (this=0xbff45c7c, __n=27531841)
at /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/bits/stl_vector.h:117
#9 0x0805405a in std::vector<fxpair, std::allocator<fxpair::_M_insert_aux (this=0xbff45c7c, __position={_M_current = 0x805d1ac}, __x=@0xbff45b38)
at /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/bits/vector.tcc:275
#10 0x08054428 in std::vector<fxpair, std::allocator<fxpair::push_back (
this=0xbff45c7c, __x=@0xbff45b38)
at /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/bits/stl_vector.h:610
#11 0x08052cbd in main () at main.cpp:85
***************************************
**************** code *****************
#include <string>
#include <vector>
#include <iostream>
using namespace std;
class acc_holder
{
string name;
double a, b, c, d, e, f, g;
double max_weekly_withdraw;
double daily_withdraw;
int h;
public:
acc_holder(string nam, double d_withdraw)
: name(nam), daily_withdraw(d_withdraw),
a(0),
b(0),
c(0),
d(0),
e(0),
f(0),
g(0)
{}
void update_weekly_figurs()
{
max_weekly_withdraw += daily_withdraw;
cout << name << ": " << max_weekly_withdraw << '\t';
}
};
int main(){
acc_holder jack("jack", 1.1);
acc_holder mary("mary", 1.2);
acc_holder sam("sam", 1.3);
acc_holder job("job", 1.4);
vector<acc_holderfund_participanets;
fund_participanets.push_back(jack);
fund_participanets.push_back(mary);
fund_participanets.push_back(sam);
fund_participanets.push_back(job);
for( unsigned i = 0; i<=3; i++){
for(unsigned j = 0; j<=fund_participanets.size()-1; j++){
fund_participanets[j].update_weekly_figurs();
}
cout << '\n';
}
} 5 55546
Gary Wessle wrote:
Hi
I am getting this error when running a very similar code like the
below, it is made for illustration only.
thanks
***************************************
**************** error ****************
(gdb) n
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
Program received signal SIGABRT, Aborted.
0xb7cd17c7 in raise () from /lib/tls/libc.so.6
(gdb) bt
#0 0xb7cfa7c7 in raise () from /lib/tls/libc.so.6
#1 0xb7cfc06b in abort () from /lib/tls/libc.so.6
#2 0xb7eef644 in __gnu_cxx::__verbose_terminate_handler ()
from /usr/lib/libstdc++.so.6
#3 0xb7eed035 in std::set_unexpected () from /usr/lib/libstdc++.so.6
#4 0xb7eed072 in std::terminate () from /usr/lib/libstdc++.so.6
#5 0xb7eed1aa in __cxa_throw () from /usr/lib/libstdc++.so.6
#6 0xb7eed5eb in operator new () from /usr/lib/libstdc++.so.6
#7 0x0804d28b in __gnu_cxx::new_allocator<fxpair>::allocate (
this=0xbff45c7c, __n=27531841)
at /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/ext/new_allocator.h:88
#8 0x0804d2b0 in std::_Vector_base<fxpair, std::allocator<fxpair::_M_allocate (this=0xbff45c7c, __n=27531841)
at /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/bits/stl_vector.h:117
#9 0x0805405a in std::vector<fxpair, std::allocator<fxpair::_M_insert_aux (this=0xbff45c7c, __position={_M_current = 0x805d1ac}, __x=@0xbff45b38)
at /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/bits/vector.tcc:275
#10 0x08054428 in std::vector<fxpair, std::allocator<fxpair::push_back (
this=0xbff45c7c, __x=@0xbff45b38)
at /usr/lib/gcc/i486-linux-gnu/4.0.4/../../../../include/c++/4.0.4/bits/stl_vector.h:610
#11 0x08052cbd in main () at main.cpp:85
***************************************
**************** code *****************
#include <string>
#include <vector>
#include <iostream>
using namespace std;
class acc_holder
{
string name;
double a, b, c, d, e, f, g;
double max_weekly_withdraw;
double daily_withdraw;
int h;
public:
acc_holder(string nam, double d_withdraw)
: name(nam), daily_withdraw(d_withdraw),
a(0),
b(0),
c(0),
d(0),
e(0),
f(0),
g(0)
{}
void update_weekly_figurs()
{
max_weekly_withdraw += daily_withdraw;
cout << name << ": " << max_weekly_withdraw << '\t';
}
};
int main(){
acc_holder jack("jack", 1.1);
acc_holder mary("mary", 1.2);
acc_holder sam("sam", 1.3);
acc_holder job("job", 1.4);
vector<acc_holderfund_participanets;
fund_participanets.push_back(jack);
fund_participanets.push_back(mary);
fund_participanets.push_back(sam);
fund_participanets.push_back(job);
for( unsigned i = 0; i<=3; i++){
for(unsigned j = 0; j<=fund_participanets.size()-1; j++){
fund_participanets[j].update_weekly_figurs();
}
cout << '\n';
}
}
The only issue I see is that you don't initialize
max_weekly_withdraw,when I compile & run output looks fine:
martin@jordaan:~$ ./hello
jack: 1.1 mary: 1.2 sam: 1.3 job: 1.4
jack: 2.2 mary: 2.4 sam: 2.6 job: 2.8
jack: 3.3 mary: 3.6 sam: 3.9 job: 4.2
jack: 4.4 mary: 4.8 sam: 5.2 job: 5.6
martin@jordaan:~$
Gary Wessle wrote:
Hi
I am getting this error when running a very similar code like the
below, it is made for illustration only.
thanks
***************************************
**************** error ****************
(gdb) n
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
std::bad_alloc is an exception that gets thrown by 'new' when it can't
allocate the memory you requested. Something (very likely the standard
library containers you are using) is requesting memory, and that memory
can't be allocated.
You should either change your memory usage patterns so that enough
memory is available to satisfy all the requests, or catch bad_alloc and
handle it in some appropriate way (or preferably, both).
--
Alan Johnson
"Alan Johnson" <aw***@yahoo.comwrites:
Gary Wessle wrote:
>Hi
I am getting this error when running a very similar code like the below, it is made for illustration only.
thanks
*************************************** **************** error **************** (gdb) n terminate called after throwing an instance of 'std::bad_alloc' what(): St9bad_alloc
std::bad_alloc is an exception that gets thrown by 'new' when it can't
allocate the memory you requested. Something (very likely the standard
library containers you are using) is requesting memory, and that memory
can't be allocated.
You should either change your memory usage patterns so that enough
memory is available to satisfy all the requests, or catch bad_alloc and
handle it in some appropriate way (or preferably, both).
to change the memory usage pattern I did the following which fixed the
problem.
push_back the addresses of the objects into the vector instead of the
objects themselves,
thank you
#include <string>
#include <vector>
#include <iostream>
using namespace std;
class acc_holder
{
string name;
double a, b, c, d, e, f, g;
double max_weekly_withdraw;
double daily_withdraw;
int h;
public:
acc_holder(string nam, double d_withdraw)
: name(nam), daily_withdraw(d_withdraw),
a(0),
b(0),
c(0),
d(0),
e(0),
f(0),
g(0)
{}
void update_weekly_figurs()
{
max_weekly_withdraw += daily_withdraw;
cout << name << ": " << max_weekly_withdraw << '\t';
}
};
int main(){
acc_holder jack("jack", 1.1);
acc_holder mary("mary", 1.2);
acc_holder sam("sam", 1.3);
acc_holder job("job", 1.4);
vector<acc_holder*fund_participanets;
fund_participanets.push_back(&jack);
fund_participanets.push_back(&mary);
fund_participanets.push_back(&sam);
fund_participanets.push_back(&job);
// no acc_holder is permited to do 2 or more consecutive transactions
// therefor they must alternate, each is permited 5 transactions.
for( unsigned i = 0; i<=3; i++){
for(unsigned j = 0; j<=fund_participanets.size()-1; j++){
fund_participanets[j]->update_weekly_figurs();
}
cout << '\n';
}
}
Gary Wessle wrote:
"Alan Johnson" <aw***@yahoo.comwrites:
>>Gary Wessle wrote:
>>>Hi
I am getting this error when running a very similar code like the below, it is made for illustration only.
thanks
*************************************** **************** error **************** (gdb) n terminate called after throwing an instance of 'std::bad_alloc' what(): St9bad_alloc
std::bad_alloc is an exception that gets thrown by 'new' when it can't allocate the memory you requested. Something (very likely the standard library containers you are using) is requesting memory, and that memory can't be allocated.
You should either change your memory usage patterns so that enough memory is available to satisfy all the requests, or catch bad_alloc and handle it in some appropriate way (or preferably, both).
to change the memory usage pattern I did the following which fixed the
problem.
push_back the addresses of the objects into the vector instead of the
objects themselves,
thank you
#include <string>
#include <vector>
#include <iostream>
using namespace std;
class acc_holder
{
string name;
double a, b, c, d, e, f, g;
double max_weekly_withdraw;
double daily_withdraw;
int h;
public:
acc_holder(string nam, double d_withdraw)
: name(nam), daily_withdraw(d_withdraw),
a(0),
b(0),
c(0),
d(0),
e(0),
f(0),
g(0)
{}
void update_weekly_figurs()
{
max_weekly_withdraw += daily_withdraw;
cout << name << ": " << max_weekly_withdraw << '\t';
}
};
int main(){
acc_holder jack("jack", 1.1);
acc_holder mary("mary", 1.2);
acc_holder sam("sam", 1.3);
acc_holder job("job", 1.4);
vector<acc_holder*fund_participanets;
fund_participanets.push_back(&jack);
fund_participanets.push_back(&mary);
fund_participanets.push_back(&sam);
fund_participanets.push_back(&job);
// no acc_holder is permited to do 2 or more consecutive transactions
// therefor they must alternate, each is permited 5 transactions.
for( unsigned i = 0; i<=3; i++){
for(unsigned j = 0; j<=fund_participanets.size()-1; j++){
fund_participanets[j]->update_weekly_figurs();
}
cout << '\n';
}
}
Hi,
Instead, *if* you had a default constructor in acc_holder, you could
have written:
vector<acc_holderfund_participanets;
fund_participanets.push_back(jack);
fund_participanets.push_back(mary);
fund_participanets.push_back(sam);
fund_participanets.push_back(job);
And change -into . in the loop.
The point is in FAQ 8.6:
( http://www.parashift.com/c++-faq-lit...s.html#faq-8.6)
"Use references when you can, and pointers when you have to."
Sincerely,
Peter Jansson http://www.p-jansson.com/ http://www.jansson.net/
Gary Wessle skrev:
Hi
I am getting this error when running a very similar code like the
below, it is made for illustration only.
thanks
***************************************
**************** error ****************
(gdb) n
terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc
Program received signal SIGABRT, Aborted.
0xb7cd17c7 in raise () from /lib/tls/libc.so.6
[snipped stack trace and demo program]
That program looks okay and will NOT throw std::bad_alloc. First rule
is to post a program that contains the behaviour you want to
demonstrate. Since you did not do that, it is impossible to help you.
Most probably you are overwriting memory somewhere in your program. The
"solution" you show in anither post on this thread is not really a
solution, but a rearrangement of code that makes the problem disappear
- for a while!
Kind regards
Peter This discussion thread is closed Replies have been disabled for this discussion. Similar topics
5 posts
views
Thread by Asfand Yar Qazi |
last post: by
|
24 posts
views
Thread by Marcus Kwok |
last post: by
|
14 posts
views
Thread by Mohsen |
last post: by
|
3 posts
views
Thread by schizoid_man |
last post: by
|
4 posts
views
Thread by sndive |
last post: by
|
4 posts
views
Thread by daroman |
last post: by
| | |
4 posts
views
Thread by Kaio Vieira |
last post: by
| | | | | | | | | | |