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

it2026-04-09  5

写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好了。

 

 

最新回复(0)