c++中创建结构体/类,还是用new吧(malloc与string相遇的错误)

写c++程序时,有这么个struct:

typedef struct FileInfo_S {
    std::string name;
    FILE_TYPE type;
    int address;
    unsigned int row;
    unsigned int col;
}FileInfo_s;

想创建一个关于它的数组,用来保存一组数据. 于是习惯性的用了c语言的方法, 于是乎埋下了祸根!:

#define MAX_FILE_NUM 10
FileInfo_s * files_info = (FileInfo_s *)malloc(MAX_FILE_NUM * sizeof(FileInfo_s));

后面的代码中,这样操作它:

for(...) {
    ...
     
    files_info[file_num_count].name = filename;
    files_info[file_num_count].address = ddr_addr;
    files_info[file_num_count].type = DATA_HEX_TXT;
    files_info[file_num_count].row = 0;
    files_info[file_num_count].col = 0;
}

程序报了奇怪的段错误,而且是在第二次循环。gdb报错在files_info[file_num_count].name = filename;这条语句上。

调试无果,突然想起malloc的内容是随机的,可能错误初始化了string类

于是乎,把初始化代码改成这样:

#define MAX_FILE_NUM 10
FileInfo_s * files_info = (FileInfo_s *)malloc(MAX_FILE_NUM * sizeof(FileInfo_s));
memset(files_info, 0, MAX_FILE_NUM * sizeof(FileInfo_s));

可以正常运行了!

这时候还不放心,想多测下。发现如果 files_info[file_num_count].name = filename(string类); 替换成 files_info[file_num_count].name = string("1");

又出段错误了!

最终,还是老老实实把初始化写作这样:

#define MAX_FILE_NUM 10
FileInfo_s * files_info = new FileInfo_s[MAX_FILE_NUM];

测试了几次,木有问题了。

最终也不知道string初始化时候都干了点啥。以后还是老老实实用new好了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值