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

getline and linked list problem

P: n/a
Kay
This function is used getline function to get data. The data is stored
as String. I want to add it in a linked list. However, the strcpy that I
have pointed cause the program segementation fault. What I can do to
add the item in the linked list and it don't need to change the Linked
list ADT item type ?
void load(istream& is, Position p, List * r )

string temp_name;

//get the restaurant name in restaurnat.txt
while ( getline(is, temp_name, '\n')) {

char *name;

//change type of name of restaurant from string to char
name = new char[temp_name.length() + 1 ];
strcpy( name, temp_name.c_str()); <-- This one

char *namet;

p = ListHead(r);
namet = (char *)malloc(sizeof(name));
strcpy (namet, name);

//Add the namet in the linked list
if (!rest_get_name(r, p, namet)) {
exit (EXIT_FAILURE);
}

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


P: n/a
Kay wrote:

This function is used getline function to get data. The data is stored
as String. I want to add it in a linked list. However, the strcpy that I
have pointed cause the program segementation fault. What I can do to
add the item in the linked list and it don't need to change the Linked
list ADT item type ?

void load(istream& is, Position p, List * r )

string temp_name;

//get the restaurant name in restaurnat.txt
while ( getline(is, temp_name, '\n')) {

char *name;

//change type of name of restaurant from string to char
name = new char[temp_name.length() + 1 ];
strcpy( name, temp_name.c_str()); <-- This one

That should be ok.
It might be that you managed to blow up the memory management
in a previous call or somewhere else in your program ...
char *namet;

p = ListHead(r);
namet = (char *)malloc(sizeof(name));
strcpy (namet, name);
.... this is suspect.
namet points to memory with the sizeof a char pointer.
Yet you insist on copying an arbitrary number of characters
to it. Shouldn't the above sequence read

namet = (char*)malloc( strlen( name ) + 1 );

//Add the namet in the linked list
if (!rest_get_name(r, p, namet)) {
exit (EXIT_FAILURE);
}


PS: Is there a reason you are using malloc in a C++ program?

--
Karl Heinz Buchegger
kb******@gascad.at
Jul 22 '05 #2

P: n/a
Kay
Yes, I can solve this problem. THX for your reading. ^^

Kay wrote:
This function is used getline function to get data. The data is stored
as String. I want to add it in a linked list. However, the strcpy that I
have pointed cause the program segementation fault. What I can do to
add the item in the linked list and it don't need to change the Linked
list ADT item type ?
void load(istream& is, Position p, List * r )

string temp_name;

//get the restaurant name in restaurnat.txt
while ( getline(is, temp_name, '\n')) {

char *name;

//change type of name of restaurant from string to char
name = new char[temp_name.length() + 1 ];
strcpy( name, temp_name.c_str()); <-- This one

char *namet;

p = ListHead(r);
namet = (char *)malloc(sizeof(name));
strcpy (namet, name);

//Add the namet in the linked list
if (!rest_get_name(r, p, namet)) {
exit (EXIT_FAILURE);
}


Jul 22 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.