首页 > 解决方案 > 将新整数插入动态数组时出现分段错误

问题描述

当我尝试向其中插入新整数时,动态数组出现分段错误。

void function1()
{
    ...
    string * array1 = new string[array_length];
    function2(array1, array_length);
    ...
    delete [] array1;
}

void function2(string *array_frm_function1, int &array_length_frm_function1)
{
    int * new_array = new int[array_length_frm_function1];
    int new_array_pos;

    for(int i = 0; i < array_length_frm_function1; i++)
    {
        string subtracted_string = array_frm_function1[i].substr(1,1); // sample string - [3,3]-543-McDonalds, will return '3'
        int string_to_integer = stoi(substracted_string);
        new_array[new_array_pos++] = string_to_integer;
    }
}

目标是从字符串中提取第一个值,在上面的示例中为 '3' 并将其转换为 int 数据类型,然后将其存储在动态数组中。

当我计算变量内存地址(array_frm_function1、subtracted_string、string_to_integer)时,它们都是不同的。变量 string_to_integer 不会因为内存地址不同而起作用吗?

我不知道是什么原因造成的,因为错误只是说它是分段错误。我上面的函数在内存地址分配方面有什么问题,应该有什么解决方案来消除这个错误?

注意:在这种情况下我不能使用矢量!非常感谢!

标签: c++arrayspointersmemory-managementsegmentation-fault

解决方案


足够简单

int new_array_pos;

应该

int new_array_pos = 0;

您应该在使用变量之前对其进行初始化,并且您应该注意编译器会在您不这样做时向您发出警告。


推荐阅读