gpt4 book ai didi

c++拆分函数随机崩溃

转载 作者:行者123 更新时间:2023-11-28 02:50:09 30 4
gpt4 key购买 nike

我为 C++ 编写了一个函数 split,因为我的程序需要它,但它随机地使程序崩溃。如果我不断重启同一个示例程序,它有时会工作,有时会崩溃。

函数如下:

char ** split(char * string, char delimiter, int &num_substrings)
{
num_substrings = 0;

char ** substrings = NULL;
int temp_len = 0;
int string_pos = 0;


substrings = (char **) calloc(1, sizeof(char*));
substrings[num_substrings] = (char *) calloc(1, sizeof(char));

while(string[string_pos] != '\0')
{
if(string[string_pos] == delimiter)
{
num_substrings++;
substrings = (char **) realloc(substrings, (num_substrings + 1) * sizeof(char*));
substrings[num_substrings] = (char *) calloc(1, sizeof(char));
temp_len = 0;
}else{
substrings[num_substrings] = (char *) realloc(substrings[num_substrings], (temp_len + 1) * sizeof(char));

substrings[num_substrings][temp_len] = string[string_pos];
temp_len++;
substrings[num_substrings][temp_len] = '\0';
}
string_pos++;
}


return substrings;

这是我测试它的方式(主要功能):

int main()
{
char *s = "1|3|teststring|";
char ** args = NULL;
int num = 0;

args = split(s, '|', num);
cout<<num<<"\n";
cout<<args[0];

}

我是用codeblocks编译的,但是用microsoft visual studio是一样的结果。

最佳答案

要按原样回答问题,temp_len+1 不够大,因为您在这段代码中增加了 temp_len:

      substrings[num_substrings] = (char *) realloc(substrings[num_substrings],
(temp_len + 1) * sizeof(char)); // Allocation here
// ...
temp_len++;
substrings[num_substrings][temp_len] = '\0'; // Invalid write 1 byte after

但我同意使用 std::stringstd::vector

关于c++拆分函数随机崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23247988/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com