You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多边形面积计算时出现Stack Overflow问题求助

解决你的多边形面积计算栈溢出问题

嘿,我来帮你揪出Stack Overflow的根源,顺便修正代码里的小bug!

核心问题:栈上数组过大导致溢出

你代码里的punct v[100000];是罪魁祸首。程序的栈内存空间非常有限——大多数系统默认栈大小只有1~8MB,而这个数组有10万个punct结构体,每个结构体包含两个long double(每个占8字节),总大小达到1.6MB。如果你的系统栈默认容量小于这个值,直接就会触发栈溢出错误。而且你实际只用到4个点,完全没必要开这么大的数组,属于过度浪费栈空间。

修复方案

方案1:改用动态分配数组

把栈上的数组转移到堆内存上分配,这样就不会占用宝贵的栈空间:

#include<iostream>
#include<fstream>
using namespace std;
struct punct {
    long double x;
    long double y;
};
int main() {
    int N;
    long double aria = 0.0;
    punct* v = nullptr; // 先初始化指针
    ifstream f("aria.in");
    ofstream g("aria.out");
    f >> N;
    v = new punct[N + 1]; // 根据实际需要的大小动态分配(1-based索引)
    
    for (int i = 1; i <= N; i++) {
        f >> v[i].x >> v[i].y;
    }
    int k = 1;
    while (k <= N - 1) {
        aria = aria + (v[k].x * v[k + 1].y - v[k + 1].x * v[k].y);
        k++;
    }
    aria = aria + (v[N].x * v[1].y - v[1].x * v[N].y);
    aria = 0.5 * aria; // 修正整数除法错误
    g << aria;
    
    delete[] v; // 释放堆内存,避免泄漏
    f.close();
    g.close();
    return 0;
}

方案2:用C++标准容器vector(更推荐)

vector会自动管理堆内存,不用手动释放,安全性更高:

#include<iostream>
#include<fstream>
#include<vector> // 别忘了添加头文件
using namespace std;
struct punct {
    long double x;
    long double y;
};
int main() {
    int N;
    long double aria = 0.0;
    ifstream f("aria.in");
    ofstream g("aria.out");
    f >> N;
    vector<punct> v(N + 1); // 直接初始化需要的大小
    
    for (int i = 1; i <= N; i++) {
        f >> v[i].x >> v[i].y;
    }
    int k = 1;
    while (k <= N - 1) {
        aria = aria + (v[k].x * v[k + 1].y - v[k + 1].x * v[k].y);
        k++;
    }
    aria = aria + (v[N].x * v[1].y - v[1].x * v[N].y);
    aria /= 2.0; // 用浮点数除法修正错误
    g << aria;
    
    f.close();
    g.close();
    return 0;
}

额外修正:整数除法的逻辑错误

你代码里的aria = 1 / 2 * aria;会导致面积计算错误——1和2都是整数,整数除法会得到0,最终面积会变成0!改成aria = 0.5 * aria;或者aria /= 2.0;就能解决这个问题。

内容的提问来源于stack exchange,提问作者Shury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:38:04