程序崩溃 - 分区为零
Program crashes - Division by zero
我的代码像这样:
if (x[b] != x[c] && x[a] != x[b])
{
if(x[a] != x[b] != x[c] != x[d])
{
if(y[a] != y[b] != y[c] != y[d])
{
int m = (y[a] - y[b])/(x[a] - x[b]);
int b = y[a] - x[a] * m;
if((y[c] - x[c]*m > b && y[d] - x[d]*m > b)|| (y[c] - x[c]*m < b && y[d] - x[d]*m < b)){
m = (y[b] - y[c])/(x[b] - x[c]);
b = y[b] - x[b] * m;
if((y[a] - x[a]*m > b && y[d] - x[d]*m > b)|| (y[a] - x[a]*m < b && y[d] - x[d]*m < b))
{
int xx[4];
int yy[4];
xx[0] = x[a];
xx[1] = x[b];
xx[2] = x[c];
xx[3] = x[d];
yy[0] = y[a];
yy[1] = y[b];
yy[2] = y[c];
yy[3] = y[d];
if(c == 1)
{
c = 0;
pt = povrsina(xx, yy);
pc = p - pt;
}
pv = povrsina(xx, yy);
pr = p - pv;
if(pr < pc)
{
pc = pr;
pt = pv;
}
else if(pr == pc)
{
pt = max(pt, pv);
}
}
}
}
}
}
我尝试的输入是:
5
30
0 0
10 0
0 10
10 10
7 3
我的程序在第174行中使用Division by zero
的错误代码崩溃:
m = (y[b] - y[c])/(x[b] - x[c]);
所以我添加了第一个if
语句检查
if x[b] != x[c]
,但由于某种原因,它仍然以相同的错误代码和同一行崩溃。
以下作用正确。
int n = 0;
double p = 0;
scanf("%dn%lf", &n, &p);
int *x = (int *) malloc(sizeof(int) * n);
int *y = (int *) malloc(sizeof(int) * n);
for(int i = 0; i < n; i++){
scanf("%d %d", &x[i], &y[i]);
}
for(int i = 0; i < n; i++){
printf("%d %dn", x[i], y[i]);
}
请参阅 demo 。
更新
由于以下行,您的代码正在崩溃。
int m = (y[a] - y[b])/(x[a] - x[b]);
考虑a, b, c, d
的值是0, 2, 3, 4
,则分母项 (x[a] - x[b])
表示(x[0] - x[2])
等于零,对吗?因为第一和第三输入是0 0
和0 10
。
如果将值除以零,则将变为无穷大,当时您的程序将崩溃。在使用Division Operation编写语句时,请确保除数不是零。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 程序崩溃 - 分区为零