I am using Visual Studio 2010 C++ and its giving me an error "bad allocation" if I increase the array size t0 40 000 by 35 000, I am new to C++ not sure what to do.

// SWTest.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>

#pragma warning(disable: 4307)


using namespace std;

double getMatchscore(char,char); 
double getMaximumvalue(double,double,double);
string reverseString(string); 


int _tmain(int argc, _TCHAR* argv[])
{
    ifstream myfile ("C:/Temp/sequencestest1.txt");

    //Declare the two sequences S1 and S2 to be used.
    string S1 = "";
    string S2 = "";
    string seperator = "";

    if (myfile.is_open()){
        if(! myfile.eof()){
            getline(myfile,S1);
        }
        if(! myfile.eof()){
            getline(myfile,seperator);
        }
        if(! myfile.eof()){
            getline(myfile,S2);
        }

        myfile.close();
    }

    string aligned_S1 = "";
    string aligned_S2 = "";

    //Declare the sequences lengths. 
    const int n = S1.length();
    const int m = S2.length();

    int p, q;
    int i_max, j_max;
    int max_Value;

    //Delcare the similarity matrix
    double** D = 0;
    char** tracebackMatrix;



    D = new double*[m+1];

    for( int i = 0; i <= m; i++ )  {
        try
        {

        D[i] = new double[n+1];
        }
    catch(std::bad_alloc& er)
    {
        
        delete [] *D;
        delete [] D ;

        std::cout << er.what() << std::endl;
    }
    }


    tracebackMatrix = new char*[m+1];
    for( int i = 0; i <= m; i++ )  tracebackMatrix[i] = new char[n+1];

    //Declare the scoring matrix to be used
    double matchscore = 2;
    double mismatchscore = -1;
    double gapscore = -1;

    int diagalignscore;
    int verticalalignscore;
    int horizontalalignscore;


    //Initialise the scoring matrix
    for(int i = 0; i <= m; i++)
    {
        D[i][0] = 0;
    }

    for(int j = 1; j <= n; j++)
    {
        D[0][j] = 0;
    }

    i_max = 0;
    j_max = 0;
    max_Value = 0;

    //Fill the other entries of the scoring matrix
    for(int i = 1; i <= m; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            diagalignscore  = getMatchscore(S1[j-1], S2[i-1]) + D[i-1][j-1];
            verticalalignscore = D[i-1][j] + gapscore;
            horizontalalignscore = D[i][j-1] + gapscore;

            D[i][j] = getMaximumvalue(diagalignscore, verticalalignscore, horizontalalignscore);

            //Keeping Track of the maximum entry in the matrix
            if (D[i][j] > max_Value)
            {
                max_Value = D[i][j];
                i_max = i;
                j_max = j;
            }

            //Keeping track of the pointers in the matrix with 'S', to signal the stop in the traceback process.
            if (D[i][j] == 0)
            {
                tracebackMatrix[i][j] = 'S';
            }
            else if (D[i][j] == diagalignscore)
            {
                tracebackMatrix[i][j] = '\\';
            }
            else if (D[i][j] == verticalalignscore) 
            {
                tracebackMatrix[i][j] = '|';
            }
            else if (D[i][j] == horizontalalignscore)
            {
                tracebackMatrix[i][j] = '-';
            }
        }
    }

    p = i_max;
    q = j_max;

    //Doing the traceback here.
    while ((tracebackMatrix[p][q] != 'S') && (p>0 && q > 0))
    {

        if (tracebackMatrix[p][q] == '|')
        {
            aligned_S1 = aligned_S1 + '-';
            aligned_S2 = aligned_S2 + S2[p-1];
            p = p-1;
        }
        else if (tracebackMatrix[p][q] == '\\')
        {
            aligned_S1 = aligned_S1 + S1[q-1];
            aligned_S2 = aligned_S2 + S2[p-1];
            p = p-1;
            q = q-1;
        }
        else if (tracebackMatrix[p][q] == '-')
        {
            aligned_S2 = aligned_S2 + '-';
            aligned_S1 = aligned_S1 + S1[q-1];
            q = q-1;
        }

    }

    cout << reverseString(aligned_S1) << endl;
    cout << reverseString(aligned_S2) << endl;

    for( int i = 0 ; i < n ; i++ ){
        delete [] D[i] ;
    }
    delete [] D ;

	return 0;
}

double getMatchscore(char a, char b)
{
    double matchscore = 0;

    if (a==b)
        matchscore = 2;
    else
        matchscore = -1;

    return matchscore;
}

double getMaximumvalue(double value1, double value2, double value3)
{
    double max = value1;

    if (max < value2)
    {
        max = value2;
    }

    if (max < value3)
    {
        max = value3;
    }

    if (max < 0)
    {
        max = 0;
    }

    return max;
}

string reverseString(string current)
{
    string returnString = "";
    int stringlength = current.length();
    int temp = stringlength-1;

    for (int i = 0; i < stringlength; i++)
    {
        returnString = returnString + current[temp];
        temp = temp - 1;
    }

    return returnString;
}

Learn to use your compiler's excellent debugger and find out where the problem occurs. Also try to remove those compiler warnings about converting double return value to int.

This article has been dead for over six months. Start a new discussion instead.