I am writing my program for my DataMining project. I get segmentation error on my code. I tried to debug using the gdb and created core dump using ulimit in ubuntu.
Below is the error I was able to backtrace in gdb.
Python Exception Cannot access memory at address 0x7fff48c47738: #0 0x000000000040cdb0 in TokenReader::getToken ( this=, this@entry=, buf=, buf@entry=) at src/tokread.c++:26 Cannot access memory at address 0x7fff48c47738
My code:
    /*********************************************************
     * Project: 2
     * File: tokread.h
     * Anil Pediredla, KUID 28056
     *********************************************************/
    #ifndef _TOKREAD_H_
    #define _TOKREAD_H_
    #include 
    using namespace std;
    const short NEW_LINE = 0;
    const short SPACE    = 1;
    const short TOKEN    = 2;
    const short COMMENT  = 3;
    class TokenReader {
      public:
        TokenReader(istream &in);
        char* getToken(char* buf);
      private:
        istream ∈
        short state;
    };
    #endif //_TOKREAD_H_
    /*********************************************************
     * Project: 2
     * File: tokread.h
     * Anil Pediredla, KUID 28056
     *********************************************************/
    #include 
    #include 
    using namespace std;
    #include "tokread.h"
    /*********************************************************
     * Class: TokenReader
     *********************************************************/
    TokenReader::TokenReader(istream &in):
      in(in), state(NEW_LINE) {
    }
    char* TokenReader::getToken(char* buf) {
      bool done = false;
      int tokLen = 0;
      while (!done && !in.eof()) {
        char ch = in.get();
        switch (state) {
          case NEW_LINE:
            if (ch == '!') state = COMMENT;
            else {
              in.unget();
              state = SPACE;
            }
          break;
          case SPACE: 
            if ((ch == 13) && (in.peek() == '\n')) in.get();
            if (ch == '\n') {
              state = NEW_LINE;
              break;
            }
            if ((ch != ' ') && (ch != '\t')) {
              in.unget();
              state = TOKEN;
            }
          break;
          case TOKEN:
            if ((ch == 13) && (in.peek() == '\n')) in.get();
            if (ch == '\n') {
              state = NEW_LINE;
              done = true;
              break;
            }
            if ((ch == ' ') || (ch == '\t')) {
              in.unget();
              state = SPACE;
              done = true;
              break;
            }
            buf[tokLen++] = ch;
          break;
          case COMMENT:
           if (ch == '\n'){
               state = NEW_LINE;
           }
          break;
        }
      }
      buf[tokLen] = '\0';
      return buf;
    }
Aucun commentaire:
Enregistrer un commentaire