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

What is the error with this code?

P: n/a
Hi all;

I write my first code using vector and list. When I run it,
segmentation fault.
Try to debug it, but it can not pass linking with -g option.
What is the error with it?

Thanks a lot.

John

----------------------------------------------------------
The code is attached:

#include <iostream>
#include <vector>
#include <list>
#include <algorithm>

using namespace std;

typedef struct{
int ID;
double time;
}node;

vector<node> myvector(){//Define a function that return a vector,
//can I do this?
vector< node > v;
for(int i = 1; i < 7; i++){
v[i].ID = i;
v[i].time = i * 1.1;
}
cout<<"v:"<<endl;
for(int i = 0; i < v.size(); ++i){
cout<<"i:"<<i<<" ID:"<< v[i].ID <<" time:"<<v[i].time <<endl;
}

return v;
}

void mylist(list< int > &l){//call-by-reference to bring the list
//back to main()
for(int i = 10; i < 16; i++){
l.push_back(i);
}
cout<<"l:"<<endl;
list<int>::iterator pos;
for(pos = l.begin(); pos != l.end(); ++pos){
cout<<"pos:"<<*pos<<endl;
}

}

int main()
{
vector< node > v1;
v1 = myvector();//get the vector from myvector().

cout<<"v1:"<<endl;

for(int i = 0; i < v1.size(); ++i){
cout<<"i1:"<<i<<" ID1:"<< v1[i].ID <<" time1:"<<v1[i].time <<endl;
}

list< int > l1;
mylist(l1);
cout<<"l1:"<<endl;

list< int >::iterator pos;

for(pos = l1.begin(); pos != l1.end(); ++pos){
cout<<"pos1:"<<*pos<<endl;
}

list< int* > l2;//declare a list of int pointer, can I do this?
int a1 = 100;
int a2 = 200;
l2.push_back(&a1);
l2.push_back(&a2);

cout<<"&a1:"<<&a1<<" &a2:"<<&a2<<endl;
cout<<"l2-a1:"<<l2.front()<<" l2-a2:"<<l2.back()<<endl;

list< int* >::iterator pos1;
pos1 = l2.begin();

cout<<"a1:"<<*(*pos1)<<endl;
cout<<"a2:"<<*(l2.end());

}

---------------------------------------------------
Error message, when I use: g++ -o -g vector vector.cc
$g++ -o -g vector vector.cc
vector(.rodata+0x0): multiple definition of `_fp_hw'
/usr/lib/crt1.o(.rodata+0x0): first defined here
vector(.init+0x0): In function `_init':
: multiple definition of `_init'
/usr/lib/crti.o(.init+0x0): first defined here
vector(.text+0x0): In function `_start':
: multiple definition of `_start'
/usr/lib/crt1.o(.text+0x0): first defined here
vector(.fini+0x0): In function `_fini':
: multiple definition of `_fini'
/usr/lib/crti.o(.fini+0x0): first defined here
vector(*ABS*+0x804d84c): multiple definition of
`_GLOBAL_OFFSET_TABLE_'
/usr/lib/crt1.o(.got.plt+0x0): first defined here
vector(.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/crt1.o(.rodata+0x4): first defined here
vector(.data+0x0): In function `__data_start':
: multiple definition of `__data_start'
/usr/lib/crt1.o(.data+0x0): first defined here
/tmp/cctWTqCU.o(.text+0x23c): In function `mylist(list<int,
allocator<int> > &)':
: multiple definition of `mylist(list<int, allocator<int> > &)'
vector(.text+0x258): first defined here
/usr/bin/ld: Warning: size of symbol `mylist(list<int, allocator<int>
&)' changed from 270 to 278 in /tmp/cctWTqCU.o

/tmp/cctWTqCU.o(.text+0x354): In function `main':
: multiple definition of `main'
vector(.text+0x368): first defined here
/usr/bin/ld: Warning: size of symbol `main' changed from 1457 to 1518
in /tmp/cctWTqCU.o
/usr/lib/crt1.o(.dynamic+0x0): multiple definition of `_DYNAMIC'
collect2: ld returned 1 exit status

$
Jul 22 '05 #1
Share this Question
Share on Google+
4 Replies


P: n/a
jo*********@yahoo.com (John) wrote:
I write my first code using vector and list. When I run it,
segmentation fault.
Try to debug it, but it can not pass linking with -g option.
What is the error with it?
With the one line I changed, the program ran and proceded to output a
bunch of stuff, but I have no idea if the stuff it output is the stuff
you wanted it to output.
----------------------------------------------------------
The code is attached:

#include <iostream>
#include <vector>
#include <list>
#include <algorithm>

using namespace std;

typedef struct{
int ID;
double time;
}node;

vector<node> myvector(){//Define a function that return a vector,
//can I do this?
Yes, you can do that.
vector< node > v;
Note, at this point 'v' has no elements in it. With the code below, you
are trying to access elements that don't exist. Try this instead:

vector< node > v(7); for(int i = 1; i < 7; i++){
v[i].ID = i;
v[i].time = i * 1.1;
}
cout<<"v:"<<endl;
for(int i = 0; i < v.size(); ++i){
cout<<"i:"<<i<<" ID:"<< v[i].ID <<" time:"<<v[i].time <<endl;
}

return v;
}

void mylist(list< int > &l){//call-by-reference to bring the list
//back to main()
for(int i = 10; i < 16; i++){
l.push_back(i);
}
cout<<"l:"<<endl;
list<int>::iterator pos;
for(pos = l.begin(); pos != l.end(); ++pos){
cout<<"pos:"<<*pos<<endl;
}

}

int main()
{
vector< node > v1;
v1 = myvector();//get the vector from myvector().

cout<<"v1:"<<endl;

for(int i = 0; i < v1.size(); ++i){
cout<<"i1:"<<i<<" ID1:"<< v1[i].ID <<" time1:"<<v1[i].time <<endl;
}

list< int > l1;
mylist(l1);
cout<<"l1:"<<endl;

list< int >::iterator pos;

for(pos = l1.begin(); pos != l1.end(); ++pos){
cout<<"pos1:"<<*pos<<endl;
}

list< int* > l2;//declare a list of int pointer, can I do this?
Yes.
int a1 = 100;
int a2 = 200;
l2.push_back(&a1);
l2.push_back(&a2);

cout<<"&a1:"<<&a1<<" &a2:"<<&a2<<endl;
cout<<"l2-a1:"<<l2.front()<<" l2-a2:"<<l2.back()<<endl;

list< int* >::iterator pos1;
pos1 = l2.begin();

cout<<"a1:"<<*(*pos1)<<endl;
cout<<"a2:"<<*(l2.end());

}

Jul 22 '05 #2

P: n/a
> typedef struct{
int ID;
double time;
}node;
Bad form--it's much better to write

struct node {
int ID;
double time;
};
vector<node> myvector(){//Define a function that return a vector,
//can I do this?
Yes. vector< node > v;
for(int i = 1; i < 7; i++){
v[i].ID = i;
v[i].time = i * 1.1;
}


Here is your problem: v has no elements, but you are trying to access those
nonexistent elements. You should write

vector<node> v;

for (int i = 1; i < 7; i++) {
node n;
n.ID = i;
n.time = i * 1.1;
v.push_back(n);
}

Jul 22 '05 #3

P: n/a
John wrote:
---------------------------------------------------
Error message, when I use: g++ -o -g vector vector.cc


You're telling your g++ to compile 'vector.cc', link a file called
'vector' to it and write the resulting executable to a file called
'-g'. I guess you actually meant:

g++ -g -o vector vector.cc

Jul 22 '05 #4

P: n/a

"Andrew Koenig" <ar*@acm.org> wrote in message
news:8A********************@bgtnsc05-news.ops.worldnet.att.net...
vector< node > v;
for(int i = 1; i < 7; i++){
v[i].ID = i;
v[i].time = i * 1.1;
}
Here is your problem: v has no elements, but you are trying to access

those nonexistent elements. You should write

vector<node> v;

for (int i = 1; i < 7; i++) {
node n;
n.ID = i;
n.time = i * 1.1;
v.push_back(n);
}


I remember the confusing thing about vectors vs. maps was that v[i] = ...
would not create a new member, but m[i] = ... would create a new member (v-
vector, m- map).
Jul 22 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.