Heap corruption detected ERROR



  • Hi ,
    I am trying to implement something like the standard c++ string class using cstring functions but I am getting the heap corruption error and debugging didn't help figure it out.My class is declared like this:

    @

    class String
    {
    public:
    //TYPEDEFS AND MEMBER CONSTANTS.

    typedef std::size_t sizetype;
    static const sizetype DEFAULT_CAPACITY=30;
    
    String(const char initial[]="");
    ~String();
    

    ................

    //private:
    char *data;
    sizetype usedSpace;

    };

    @

    and the relevant implementation is shown below:

    @

    //CONSTRUCTOR
    String::String(const char initial[])
    {

    data=new char[strlen(initial)];
    strcpy(data,initial);
    used=strlen(initial);

    }

    String::~String()
    {
    delete [] data;
    }

    @

    But when i instantiate the class in the main function to test ,like this:

    @
    #include <iostream>
    #include <cstring>
    using namespace std;
    int main()
    {

    String mString1("KARAMAGE");
    String mString2("KAREKEZI");

    cout << mString1.data <<endl;
    cout << mString2.data <<endl;

    return 0;
    

    }

    @
    The program crashes when the destructor is called (at least the call stack of my degugger is telling me so).I first thought it was a problem with our processor but I am experiencing the same issues on my intel windows8 machine.Am I doing something wrong here ,as I have always declared pointer arrays and deleted them like this.
    I would also appreciate it if you helped run this code through your environment and tell me what your debugger is saying.

    Thanks for your time.



  • Hi,

    One thing I spotted is that the size of your data buffer is wrong in the String constructor, strlen() doesn't count the terminating null character.

    Hope it helps,
    H.



  • Thanks mate,
    I had been staring at this piece of code for hours without noticing that !It really helped.

    Dan.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.