pyd68tc 2015-04-17 14:34 采纳率: 50%
浏览 1884
已采纳

这段代码有哪里会引起RuntimeError的地方么

我在本地测试没出过问题,但是放到oj系统上就runtime error,错误代码11。
应该是访问到未定义的内存,可是我查了好久都没找到哪里越界了,求指教

 #include <cstdio>

#define Length 1600050

struct StacketNode
{
    int data;
    StacketNode* next;
};

class Stacket
{
private:    int _size;
            StacketNode* Bottom;
            StacketNode* Top;
public:
    Stacket();
    ~Stacket();
    void Push(int tra);
    int Pop();
    int GetTop();

private:

};

Stacket::Stacket()
{
    Bottom = new StacketNode();
    Bottom->data = 0;
    Top = Bottom;
    _size = 0;
}

void Stacket::Push(int tra)
{
    StacketNode* temp = new StacketNode();
    temp->data = tra;
    temp->next = Top;
    Top = temp;
    _size++;
    return;
}

int Stacket::Pop()
{
    StacketNode* temp;
    int temint;
    temp = Top;
    temint = temp->data;
    Top = Top->next;
    Top->next;
    delete temp;
    _size--;
    return temint;
}

int Stacket::GetTop()
{
    return Top->data;
}


int main()
{
    int n = 0, m = 0, b = 0, t = 0;
    int trains[Length];
    bool Isfeasible = true;
    scanf("%d %d",&n,&m);
    int Seq[Length];
    Stacket* A = new Stacket();
    Stacket* B = new Stacket();
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &trains[i]);
        A->Push(n-i);
    }
    for (int i = 0; i < n; i++)
    {

            for (int j = 0; j < n; j++)
            {
                if (B->GetTop() == trains[i])
                {
                    B->Pop();
                    Seq[t++] = 1;
                    b--;
                    break;
                }
                else if(A->GetTop() == 0)
                {
                    Isfeasible = false;
                    break;
                }
                else
                {
                    if (++b <= m)
                    {
                        B->Push(A->Pop());
                        Seq[t++] = 0;
                    }
                    else
                    {
                        Isfeasible = false;
                        break;
                    }
                }
                if (Isfeasible == false)
                    break;
            }

    }
    if (Isfeasible == false)
        printf("No\n");
    else
    {
        for (int i = 0; i < t; i++)
        {
            switch (Seq[i])
            {
            case 0:
                printf("push\n");
                break;
            case 1:
                printf("pop\n");
            }
        }
    }
    return 0;
}

补充OJ问题:

描述
某列车调度站的铁道联接结构如Figure 1所示。

其中,A为入口,B为出口,S为中转盲端。所有铁道均为单轨单向式:列车行驶的方向只能是从A到S,再从S到B;另外,不允许超车。因为车厢可在S中驻留,所以它们从B端驶出的次序,可能与从A端驶入的次序不同。不过S的容量有限,同时驻留的车厢不得超过m节。

设某列车由编号依次为{1, 2, ..., n}的n节车厢组成。调度员希望知道,按照以上交通规则,这些车厢能否以{a1, a2, ..., an}的次序,重新排列后从B端驶出。如果可行,应该以怎样

的次序操作?

输入
共两行。

第一行为两个整数n,m。

第二行为以空格分隔的n个整数,保证为{1, 2, ..., n}的一个排列,表示待判断可行性的驶出序列{a1,a2,...,an}。

输出
若驶出序列可行,则输出操作序列,其中push表示车厢从A进入S,pop表示车厢从S进入B,每个操作占一行。

若不可行,则输出No。

样例
见英文题面

限制
1 ≤ n ≤ 1,600,000

0 ≤ m ≤ 1,600,000

时间:2 sec

空间:256 MB
Example 1
Input

5 2
1 2 3 5 4
Output

push
pop
push
pop
push
pop
push
push
pop
pop
Example 2
Input

5 5
3 1 2 4 5
Output

No

  • 写回答

2条回答 默认 最新

  • huangshanchun 2015-04-19 00:52
    关注

    #define Length 1600050
    int trains[Length];
    int Seq[Length]; 太大导致的stack overflow,应该使用堆上的内存
    int *trains=new int[Length];
    int *Seq=new int[Length];

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大