如果我像这样运行此代码,则会出现分段错误错误。但是,如果我把for循环放在main中它可以正常工作。我不明白为什么会这样?
答案 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();
}