C++ 主函数和函数中的动态数组
如果我像这样运行这个代码,它会给出分段错误。然而,如果我把for循环放在main中,它就可以正常工作。我不明白为什么会发生这种情况?您的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
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();
}