在某些情况中,为什么程序突然中断?

问题
【搜索与回溯算法】生成字符串 (Standard IO)
时间限制: 1000 ms 空间限制: 262144 KB 具体限制

题目描述:
假设一个字符串只由字符”0”、”1”、‘’组成,其中字符‘’表示该字符可由字符”0”或”1”替代。

现有一些字符串,根据这些字符串生成所有可生成的字符串。

注意后一个例子中”*01”并没有生成新的字符串。

输入
第一行是两个整数M,N(1≤M≤15,0≤N≤2500)。M表示字符串的长度,N表示字符串的个数。
以下N行每行各有一个字符串。各行的行首、行末没有多余的空格。

输出
一行,为一个整数,Total表示所能生成的字符串的个数。

样例输入
2 3
10
1
0

样例输出
4

代码:

#include<bits/stdc++.h>
using namespace std;
string a[2505];
int n,m,t,len,flag;
bool visit[900000005];
void dg(int x,int i)
{
    if(x>len)
    {
        long long qn=atol(a[i].c_str());
        if(visit[qn]==0)
        {
            t++;
            visit[qn]=1;
            cout<<1;
        }
    }
    else
    {
        
        if(a[i][x]=='*')
        {
            a[i][x]='1';
            dg(x+1,i);
            a[i][x]='0';
            dg(x+1,i);            
            a[i][x]='*';
        }
        else dg(x+1,i);
    }
}
int main()
{
    cin>>m>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];    
        len=a[i].size();
        dg(0,i);
    }
    cout<<t;
}



假设bool占用1字节并按1字节对齐,900000005字节/1024/1024/1024=0.8381903218gb,小程序大内存。如果按照4字节对齐,那还真不得了。系统会如何处理我不知道,但是不应该这样写。最后,抱歉,没有看明白题目。