c ++ split函数随机崩溃

时间:2014-04-23 14:53:25

标签: c++ function crash

我为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也是一样的结果。

1 个答案:

答案 0 :(得分:2)

要按原样回答问题,{​​{1}}不够大,因为您在此代码中增加了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::string