Сегментация в цикле — чрезмерный прогон (i & lt; SIZE, но i = SIZE)

Это функция в программе, копирующей прокладку Серпинского. Эта функция должна прикреплять точки в треугольнике для фрактала.

После долгих размышлений я выяснил, в чем проблема:

void add_pts(int &x, int &y)
{
Vector_ref<Rectangle> pt;
for (int i = 0; i < POINTS; ++i)
{
pt_test; //generates changing x, y vals within the limits of the triangle
cout << "pass" << i <<endl;
pt.push_back(new Rectangle(Point(x,y),5,5));
pt[i].set_fill_color(Color::yellow);
win.attach(pt[i]);
}
}

Выходные данные: «pass1 … pass [POINTS-1]», но по какой-либо причине он запускается, когда i = POINTS, и сталкивается с ошибкой сегментации. Я понятия не имею, почему. Кто-нибудь может помочь, пожалуйста?

Вот мой код Pt_test и координировать это немного неаккуратно, но, поскольку он не может работать должным образом, очень трудно определить, что я могу упростить.

#include <stdlib.h>
#include <iostream>
#include <cmath>
#include <iomanip>
#include <time.h>
#include "Simple_window.h"#include "Graph.h"#include "Point.h"#include "GUI.h"#include "Window.h"using namespace std;
using namespace Graph_lib;

// globals

const int POINTS = 5000;
unsigned int seed = (unsigned int)time(0);
Simple_window win(Point(100,100),1100,700,"Homework 9");

// function declarations

double random(unsigned int &seed);
bool coords(int &x, int &y);
void pt_test(int x, int y);
void add_pts(int &x, int &y);

int main()
{

int x, y;

// title

Text title(Point(400,50), "The Sierpinski Gasket");
title.set_font(Graph_lib::Font::helvetica_bold);
title.set_font_size(25);
title.set_color(Color::cyan);
win.attach(title);

// triangle

Closed_polyline tri;
tri.add(Point(250,75)); // A
tri.add(Point(850,75)); // B
tri.add(Point(550,675)); // C
tri.set_fill_color(Color::white);
tri.set_color(Color::dark_red);
tri.set_style(Line_style(Line_style::solid,3));
win.attach(tri);

// vertices
Text vert_a(Point(225,70), "A (250, 75)");
vert_a.set_font(Graph_lib::Font::helvetica_bold);
vert_a.set_font_size(15);
vert_a.set_color(Color::cyan);
Text vert_b(Point(855,70), "B (850, 75)");
vert_b.set_font(Graph_lib::Font::helvetica_bold);
vert_b.set_font_size(15);
vert_b.set_color(Color::cyan);
Text vert_c(Point(575,670), "C (550, 675)");
vert_c.set_font(Graph_lib::Font::helvetica_bold);
vert_c.set_font_size(15);
vert_c.set_color(Color::cyan);

win.attach(vert_a);
win.attach(vert_b);
win.attach(vert_c);

// point selection

add_pts(x, y);

// window title and display

win.wait_for_button();

}

double random(unsigned int &seed)
{
const int MODULUS = 15749;
const int MULTIPLIER = 69069;
const int INCREMENT = 1;
seed = ((MULTIPLIER*seed)+INCREMENT)%MODULUS;
return double(seed)/double(MODULUS);
}

bool coords(int &x, int &y) // generates the points
{
x = int(251 + 600*random(seed));
y = int(76 + 600*random(seed));
if( y > (2*x-425) && x<= 550 || x>=550 && y < (-2*x + 1775))
return true;
}

void pt_test(int x, int y) // tests the points until they are within the range
{
coords;
while(coords == 0)
coords;
}

void add_pts(int &x, int &y) // attaches the points as shapes
{
Vector_ref<Rectangle> pt;
for (int i = 0; i < POINTS; ++i)
{
pt_test;
cout << "i == " << i << "  points == " << POINTS << endl;
pt.push_back(new Rectangle(Point(x,y),5,5));
pt[i].set_fill_color(Color::yellow);
win.attach(pt[i]);
}
}

Я также заметил, что функция add_pts не работает, когда тело находится в цикле, но если вы поместите тело в int_main (), оно будет работать бесконечно, но не достигнет ошибки сегментации так быстро, если это вообще произойдет.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]