c++ - NFA模拟器错误C++

标签 c++ out-of-memory runtime-error nfa

我的 NFA 模拟器有一个大问题。
当我运行代码时,有时一切都很顺利,但有时我会得到这个

Process terminated with status -1073741819(0xC0000005)

我遗漏了什么以及如何使这项工作顺利进行?

这是代码:

#include <iostream>
#include<fstream>
#include<map>
using namespace std;
ifstream fin("fisier.txt");
class NFA {
int initiala,finale,stari,tran,cuvinte;
int *f;
multimap <pair <int,int>,char>t;
public:
    void stari_finale();
    void tranzitii();
    void rezolvare();
    };
void NFA::stari_finale()
    {
    fin>>finale;
    f=new int[finale];
    for(int i=1;i<=finale;i++)
        fin>>f[i];
    }

void NFA::tranzitii() 
    {
    fin>>tran;
    for(int i=1;i<=tran;i++)
        {
        int x,y;
        char c2;
        fin>>x>>y>>c2;
        t.insert(make_pair(make_pair(x,y),c2));
        }
    }

void NFA::rezolvare()
{
fin>>stari>>initiala;
fin>>cuvinte;
for(int i=1;i<=cuvinte;i++)
{
    int l;
    fin>>l;
    char *cuv=new char[l+1];
    fin.get();
    fin.getline(cuv,l+1);
    int *c=new int[stari],nr=1;
    c[1]=initiala;
    for(int j=0;j<l;j++)
    {
        int *c1=new int[stari];
        int n=0;
        for(int k=1;k<=nr;k++)
            for(int z=0;z<=stari;z++)
                 if(t.find(make_pair(c[k],z))!=t.end())
                    if(t.find(make_pair(c[k],z))->second==cuv[j])
                        n++,c1[n]=z;
        for(int k=1;k<=n;k++)
            c[k]=c1[k];
        nr=n;
        delete c1;
    }
    for(int j=1;j<=nr;j++)
        {for(int k=1;k<=finale;k++)
            if(c[j]==f[k])
    {
        cout<<"Word "<<cuv<<" is accepted!\n";
        nr=-1;
        break;
    }
    if(nr==-1)
        break;
        }
    if(nr!=-1)
    cout<<"Word "<<cuv<<" isn't accepted!\n";
    delete c;
    delete cuv;
}

}

int main()
{
NFA test;
test.stari_finale();
test.tranzitii();
test.rezolvare();
return 0;
}

最佳答案

一个主要问题是您没有对变量调用正确的删除。如果调用 new,则需要调用 delete。如果调用 new[],则需要使用 delete[]。混合调用 new[]delete 将导致未定义的行为,这是正在发生的事情的征兆。

您对 cc1cuv 的删除调用都应该是 delete [] variable_name

关于c++ - NFA模拟器错误C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28944763/

相关文章:

javascript - 如何使用 Javascript 向 MVC 中的 ModelState 添加错误消息?

c++ - 处理温度程序

c++ - 平台无关的线程间通信

c++ - regex_replace 问题

c++ - 如何让 gdb 从 icc "CHKP: Bounds check error"中断 `-check-pointers=write`

java - 无法在mac上运行java程序

c++ - 用于测试插入中的参数(按编号)的 ODBC API 是标识列

android - 致命信号 11 (SIGSEGV) 位于 0x00000000(代码=1),线程 27830(ple.myfragexample)——仅适用于 Android 4.1.2

java - 使用 XLConnect : run out of Java memory 将 Excel 文件读取到 R

android - 如何处理来自Web服务的过多数据? OOM