Windows DatabaseebooksStatistical Information

LWE10346 : Run-Time Check Failure #2 - Stack around the variable x was corrupted.

Symptom:

When this happens in a DLL you might get something like External Exception 0x80000003

Cause:

none

Solution:

In C/C++ when a variable is defined in a function, it will go on the stack. When you use new, it will go on the heap. Now consider the following:

char buffer[10];
buffer[11] = "!"; //event buffer[10] is already out of range!

This means you will write over the boundaries of your character array (a string). When you leave this function, you leave the function-scope and the stack around this buffer is corrupted. When you have this kind of error, you should check the variable for writing behind its boundaries. Most of the time you can correct these problems with adding 1 to your array. (This is due to the syntax of C/C++ which makes it difficult to exactly stay in your boundaries)

Please note the following:

char buffer[1]; //this can only contain 1 character! NOT 2!

This means in fact that buffer[1] is already out of range!



The following function will deliver the error:

void testf()
{
    char buffer[10];

    strcp(buffer, "This is longer than 10 and so will corrupt your stack");
}


Here I added a whole application and documented where it goes wrong! It is a Qt console application.

#include <QtCore/QCoreApplication>
#include <QTimer>
#include <iostream>

void testf()
{
        char buffer[1];
        buffer[0] = 'a';
        buffer[1] = 'b'; //here it goes wrong! This is out of the boundaries!
}

int main(int argc, char *argv[])
{
    using namespace std;

    QCoreApplication a(argc, argv);

    cout << "Buffertest starts..." << endl;
    testf();
    cout << "Buffertest ended." << endl;

    QTimer::singleShot(500, &a, SLOT(quit())); //otherwise the program will not end!
    return a.exec();
}

Disclaimer:

The information provided in this document is intended for your information only. Lubby makes no claims to the validity of this information. Use of this information is at own risk!
Copyright © 2004-2011 Lubby (V3.0.10 Aug 2011)
Sponsored by Keskon.
Statistical information by Google Analytics