C++ 主函数和函数中的动态数组

C++ 主函数和函数中的动态数组,c++,global,dynamic-arrays,C++,Global,Dynamic Arrays,如果我像这样运行这个代码,它会给出分段错误。然而,如果我把for循环放在main中,它就可以正常工作。我不明白为什么会发生这种情况?您的deneme函数正在迭代一个未初始化为指向数组的指针。这是因为在main中初始化了同名的不同指针 除此之外,您还有未定义的行为: 因为点未初始化。可以强制对数组元素进行值初始化,从而将其数据成员初始化为零,如下所示: // value-initialize array and assign to global pointer lol_array = new fo

如果我像这样运行这个代码,它会给出分段错误。然而,如果我把for循环放在main中,它就可以正常工作。我不明白为什么会发生这种情况?

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

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

因为
未初始化。可以强制对数组元素进行值初始化,从而将其数据成员初始化为零,如下所示:

// value-initialize array and assign to global pointer
lol_array = new forsort[ant_count]();
//                                ^^ 
注意,在现实生活中,您可能会使用
std::vector
std::unique\u ptr
。比如说,

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);
}
void deneme(标准::向量&v)
{
对于(自动计数=v.size(),i=0;i
您可以使用以下代码(尽管不是很安全):

struct forsort
{
积分点;
int-id;
};
forsort*lol_数组;
无效数据项(整数和单位计数)
{
对于(int i=0;i
仍然没有定义行为(参见我答案的第二部分)。
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);
}
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();

}