结束进程错误代码 -1,如果访问结构的字符串字段
End process error code -1 if acess to string field of structure
#include <cstdlib>
#include <string>
#include <iostream>
#define S 10
using namespace std;
struct List
{
string name;
bool male;
int year;
string addr;
string diag;
bool hosp;
};
main()
{
struct List *l=NULL;
int n=0;
for(int i=0;i<10000;i++)
{
if(!(n%S))
{
l=(List*)realloc(l,(n/S+1)*S*sizeof(struct List));
cout<<"realloc okn";
};
l[n].male=rand()%2;
l[n].year=1900+rand()%100;
l[n].hosp=rand()%2;
//!l[n].name="abc";
n++;
cout<<l[rand()%n].male<<" "<<l[rand()%n].year<<" "<<l[rand()%n].hosp<<endl;
}
}
如果 l[n].name="abc" 注释,则程序工作正常。
如果我尝试将字符串值放到此字段,则程序编译时没有警告,但在第一次 realloc 后崩溃并显示错误代码 -1。有什么方法可以解决吗?
由于您的结构是非平凡的 - 它包含类类型的成员,std::string
,需要通过调用其构造函数来初始化 - 您不能简单地分配原始内存并假装包含有效对象。
最简单的解决方案是使用类型感知动态数组
std::vector<List> l;
可以调整大小,保留其内容,使用
l.resize((n/S+1)*S);
提示!使用"new"运算符分配此结构将自动为每个字段创建字符串对象。
List *l=new struct List[S];
它解决了这个问题,l[n].name="abc"可以工作,但它没有实现重新分配功能。
相关文章:
- C++结构到字符串
- 从字符串中获取结构的大小
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 如何解析表示树状数据结构的字符串
- 如何将字符串与结构(也包括字符串)进行比较?
- 如果结构中的字符串比使用的 p/调用签名长或短,会发生什么情况?
- 在向量 C++14(无限制联合)的结构内的联合中创建和存储字符串
- C++ - 使用用户输入的字符串数据检查结构字符串数据(无限执行 while 循环)
- 将字符串存储在 constexpr 结构中
- 为什么我的结构在包含字符串时崩溃?
- 如何将字符串字符与结构数组进行比较?
- 无法使用 strcpy 将字符串复制到静态结构成员
- c++ 将函数参数(带有模板变量的结构)转换为函数体内的字符串
- 在 c++ 中使用字符串变量选择静态类结构,而不带对象
- 如何输出属于向量数组的结构字符串
- 为什么我不能像正常一样初始化 typedef 结构字符串或字符?
- 如何引用结构字符串成员
- c++运算符+=重载结构字符串
- 如何将平面列表合并转换为层次结构字符串
- 如何在c++中比较两个结构字符串