int client::add_user(item & item_in)
{
char temp[ASIZE];
cout << "\n\nEnter the name of your item: ";
cin.get(temp, 100, '\n');
cin.ignore(100, '\n');
get_upper(temp);
item_in.name = temp;
cout << "\n\nEnter in effect one: ";
cin.get(temp, 100, '\n');
cin.ignore(100, '\n');
get_upper(temp);
item_in.effect1 = temp;
cout << "\n\nEnter in effect two: ";
cin.get(temp, 100, '\n');
cin.ignore(100, '\n');
get_upper(temp);
item_in.effect2 = temp;
cout << "\n\nEnter in effect three: ";
cin.get(temp, 100, '\n');
cin.ignore(100, '\n');
get_upper(temp);
item_in.effect3 = temp;
cout << "\n\nEnter in effect four: ";
cin.get(temp, 100, '\n');
cout << "this";
cin.ignore(100, '\n');
cout << "that";
get_upper(temp);
item_in.effect4 = temp;
... 理解我确信这段代码有很多错误,我遇到的问题是前四个块运行得很好,但是当我用g ++编译这个代码并运行它时,&#34;这个&#34;显示,然后是分段错误,没有&#34;那个&#34;。有什么想法吗?
答案 0 :(得分:3)
根据您的另一个问题,参数item_in
看起来像是一个包含多个char *
字段的结构。存在严重问题,因为数组temp
仅在此函数期间存在。您正在为item_in
中的指针分配临时数组的地址。当函数返回时,数组超出范围,其内存不再是你的。
您可以通过为指针分配内存并复制数据来解决此问题,但最佳解决方案是使用C ++标准库中的std::string
。它像您期望的那样处理资源管理和分配工作等操作。