主要和功能中的动态数组

时间:2013-11-17 12:56:07

标签: c++ global dynamic-arrays

如果我像这样运行此代码,则会出现分段错误错误。但是,如果我把for循环放在main中它可以正常工作。我不明白为什么会这样?

2 个答案:

答案 0 :(得分:2)

您的deneme函数正在迭代未初始化为指向数组的指针。这是因为在main中您初始化了一个同名的不同的指针。

除此之外,您还有未定义的行为

lol_array[i].point += (ant_count-i); 

因为point未初始化。您可以强制您的数组元素值初始化,因此他们的数据成员零初始化,如下所示:

// value-initialize array and assign to global pointer
lol_array = new forsort[ant_count]();
//                                ^^ 

注意,在现实生活中,您可能会使用std::vector<forsort>std::unique_ptr<forsort[]>。例如,

void deneme(std::vector<forsort>& v)
{

  for (auto count = v.size(), i = 0; i < count; ++i)
    fs[i].point += (count-i); 
}

int main()
{
  std::vector<forsort> v(ant_count);
  deneme(v);
}

答案 1 :(得分:0)

您可以使用以下代码(虽然它不是很安全):

struct forsort
{
    int point;
    int id;
};


forsort* lol_array;

void deneme(int ant_count)
{
    for (int i = 0; i < ant_count; i++)
        {
            lol_array[i].point += (ant_count-i); 
        }
}

int main ()
{

    int ant_count =4;
     lol_array = new forsort[ant_count]; 
     //here you need to initialise the contents properly as juanchopanza suggested
    deneme(ant_count);
    getch();

}