обработка файла (для файла с более чем одним полем) и проблемы, связанные с ним - PullRequest
0 голосов
/ 22 сентября 2011

вот код, который я написал для создания symtab файла sic / xe .asm ....

 #include<iostream>
 #include<fstream>
 #include<iomanip>
 #include"aviasm.h"
 using namespace std;

 void aviasm::crsymtab()
{

ofstream outs("symtab.txt",ios::out);//creating the symtab
ofstream outi("intermfile.txt",ios::out);//creating the intermediate file
ifstream in("asmfile.txt",ios::in);//opening the asmfile which i have already written
in.seekg(0,ios::beg);


char c;
string str[3];
string subset;
long locctr=0;
int i=0;


while((c=in.get())!=EOF)
{
    in.putback(c);
    while((c=in.get())!='\n')
    {
        in.putback(c); //putting back the first encountered letter
        in>>str[i++];  //the asm file has three or less fields in every row
    }

    if(str[0].size()!=0 && str[1].size()!=0 && str[2].size()!=0)//if all 3 are there
    {

        if(str[1]=="start")
        {
            outi<<hex<<locctr;
            outs<<str[1]<<" "<<locctr<<"\n";
            outs<<resetiosflags(ios::hex);
            outi<<" "<<str[0]<<" "<<str[1]<<" "<<str[2]<<"\n";
            locctr=stol(str[2],0,16);
        }//str[1]=start
     }//end of all the three fields
}
in.close();
outi.close();
outs.close();
}//end of crsymtab

..... вот пример sic / xe.asm file ..... обратите внимание, что в приведенном выше коде я не включил весь кодированный код, потому что проблема возникает, даже если я закомментирую всю часть кода, кроме приведенного выше ... проблема возникает всякий раз, когдая запускаю код:

  1. Появляется окно сообщения с: 'Unhandled exception at 0x00ba7046 in aviasm.exe: 0xC0000005: Access violation writing location 0xcccccccc.' и моя программа переходит в
    режим отладки ... также появляется файл с именем iosfwd(std::char_traits<char>) со стрелкой встрока _Left=_Right; следующей функции:

    static void __CLRCALL_OR_CDECL assign(_Elem& _Left, const _Elem& _Right) { // assign an element _Left = _Right; }

  2. Кроме того, я вывожу несколько слов на консоль в начале и конце блока str[1]="start" чтобы проверить, работала ли эта функция ... хотя обе строки работали
    , и я также уверен, что программа успешно взяла программу из файла asm (я проверял это), строки не выводятсяв intermfile и symtab ... помогите плз ??

1 Ответ

1 голос
/ 22 сентября 2011

Вы должны запустить вашу программу внутри отладчика.Если вы используете Windows, то MSVC предоставляет среду отладки.Если вы используете Linux, скомпилируйте вашу программу с помощью -g и запустите отладчик gdb: gdb ./myprog.Вы сразу обнаружите, что в этой строке:

in>>str[i++];  //the asm file has three or less fields in every row

i имеет значение 4, которое превышает размер массива str.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...