下面的代码是我的源代码,它是我最近参加的实验室测试的一部分。我被计算掉了点,因为程序没有正确地显示线条并按照预期的颜色进行着色。我发现这令人难以置信,因为我测试了3分(绘制两条线),以便在定时测试中节省时间,并且它完美地工作。测试的示例输入是5分(四行)。当我下载我的代码并用5分进行测试时,图形显示确实变得混乱,绘制看似随机的线条。我调试了它,并且在第一个for循环的第三次迭代(第四次循环)之后,程序正在从用户收集x和y坐标,为x坐标值输入的任何内容似乎都会覆盖循环控制变量no_points[0]
,没有明显的原因。我的想法是循环控制变量和第四个x坐标值以某种方式共享一个地址。正如我所说,我已经参加了考试并获得了成绩,所以我不是在寻找任何可以作弊的讲义。我根本无法理解为什么会这样。任何帮助,将不胜感激。
#include <iostream>
#include "graph1.h"
#include <cstdlib>
using namespace std;
// declaring prototypes
void getData(int* no_points, int* x, int* y, int* r, int* g, int* b);
void drawPolyLine(int* objects, int*x, int* y, int* no_points);
void colorPolyLine(int* objects, int* no_points, int r, int g, int b);
// declaring main
int main()
{
int no_points = NULL;
int x = NULL;
int y = NULL;
int r = NULL;
int g = NULL;
int b = NULL;
int objects[50] = {};
int again = 1;
do
{
displayGraphics();
clearGraphics();
getData(&no_points, &x, &y, &r, &g, &b);
drawPolyLine(objects, &x, &y, &no_points);
colorPolyLine(objects, &no_points, r, g, b);
cout << "Please enter a 0 to exit the program..." << endl;
cin >> again;
} while (again == 1);
return 0;
}
// declaring functions
void getData(int* no_points, int* x, int* y, int* r, int* g, int* b)
{
cout << "Enter # of points: " << endl;
cin >> *no_points;
cout << "Number of points entered is " << *no_points << endl;
cout << "Enter r/g/b colors..." << endl;
do
{
cout << "Enter a red value between 0 and 255 " << endl;
cin >> *r;
} while (*r < 0 || *r > 255);
do
{
cout << "Enter a green value between 0 and 255 " << endl;
cin >> *g;
} while (*g < 0 || *g > 255);
do
{
cout << "Enter a blue value between 0 and 255 " << endl;
cin >> *b;
} while (*b < 0 || *b > 255);
for (int i = 0; i < no_points[0]; i++)
{
cout << "Enter the x/y coord for Point #" << i + 1 << endl;
cin >> x[i]; cin >> y[i];
}
}
void drawPolyLine(int* objects, int* x, int* y, int* no_points)
{
for (int i = 0; i < no_points[0] -1; i++)
objects[i] = drawLine((x[i]), (y[i]), (x[i + 1]), (y[i + 1]), 3);
}
void colorPolyLine(int* objects, int* no_points, int r, int g, int b)
{
for (int i = 0; i < no_points[0] - 1; i++)
{
setColor(objects[i], r, g, b);
}
}
答案 0 :(得分:1)
x坐标值似乎是覆盖了循环控制变量&#34; no_points [0]&#34;,没有明显的原因。
嗯,无论如何,无论如何你是显而易见的。
在您的主程序中,您将所有变量no_points
,x
,y
等声明为标量,而不是数组。也就是说,每个变量都包含一个 int
。您的其他函数会将指向这些变量的指针(您提供的参数作为参数)视为指向数组至少no_points
个元素的长度。访问第一个元素(在索引0处)会产生未定义的行为。
虽然实际上无法从代码和标准中预测未定义行为的结果,但内存损坏是您提供的错误代码的常见结果。