Zah*_*ari -4 c++ struct segmentation-fault
我定义了两个结构。点和三角形,我想在主函数中用随机值初始化它们。但是这一行的编译器出了问题,停了下来。问题是什么?
#include <cmath>
#include <ctime>
struct Point{
double x;
double y;
double z;
};
struct Triangle{
Point* a;
Point* b;
Point* c;
};
int main() {
Triangle t1;
srand(time(0));
t1.a->x=10.0*(rand()/RAND_MAX)-5; //this line gives Segmentation fault
t1.a->y=10.0*(rand()/RAND_MAX)-5;
t1.a->z=10.0*(rand()/RAND_MAX)-5;
t1.b->x=10.0*(rand()/RAND_MAX)-5;
t1.b->y=10.0*(rand()/RAND_MAX)-5;
t1.b->z=10.0*(rand()/RAND_MAX)-5;
t1.c->x=10.0*(rand()/RAND_MAX)-5;
t1.c->y=10.0*(rand()/RAND_MAX)-5;
t1.c->z=10.0*(rand()/RAND_MAX)-5;
}
Run Code Online (Sandbox Code Playgroud)
您正在取消引用具有未定义行为的未初始化指针。
在这里使用指针没有意义 - 只需使用Points 作为成员。
这有几个好处:
然后添加几个函数,这样你就不需要复制和粘贴那么多了:
struct Point{
double x;
double y;
double z;
};
struct Triangle{
Point a;
Point b;
Point c;
};
double random_value()
{
return (10.0*rand())/RAND_MAX - 5;
}
Point random_point()
{
return { random_value(), random_value(), random_value() };
}
Triangle random_triangle()
{
return { random_point(), random_point(), random_point() };
}
int main() {
srand(time(0));
Triangle t1 = random_triangle();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |