c++ - 分配大小无效 : 4294967295 byte

标签 c++ visual-studio memory-management graph

我正在编写关于 ullman 算法的代码,当我运行我的程序时,我遇到了: “无效的分配大小:4294967295 字节”错误。它可能是关于 vector 的?或者别的什么?有什么可以帮助我的吗?

void ullman(Graph &graph,Pattern pattern,int **p,int k)
{
bool flg=true;
if(k>=pattern.vertexNum)
{
    int **tmp;
    tmp=new int *[pattern.vertexNum];
    for(int i=0;i<pattern.vertexNum;i++)
        tmp[i]=new int [graph.vertexNum];

    for(int i=0;i<pattern.vertexNum;i++)
        for(int j=0;j<graph.vertexNum;j++)
            tmp[i][j]=p[i][j];
    graph.permutation.push_back(tmp);

    return;
}
for(int i=0;i<graph.vertexNum;i++)
{
    for(int j=0;j<pattern.vertexNum;j++)
        if(p[j][i])
            flg=false;
    if(!flg)
    {
        flg=true;
        continue;
    }
    p[k][i]=1;
    if(examin(graph,pattern,p,k))
        ullman(graph,pattern,p,k+1);
    p[k][i]=0;
}

return;}

bool examin(Graph &graph,Pattern pattern,int **p,int k)
 {
bool flg=true;
int **pt;  
pt=new int *[graph.vertexNum];
for(int i=0;i<graph.vertexNum;i++)
    pt[i]=new int [pattern.vertexNum];
for(int i=0;i<pattern.vertexNum;i++)
    for(int j=0;j<graph.vertexNum;j++)
        pt[j][i]=p[i][j];

char **tmp; // P*graph
char **tmp2; // tmp*pt

tmp= new char *[pattern.vertexNum];
for(int i=0;i<pattern.vertexNum;i++)
    tmp[i]=new char[graph.vertexNum];
for(int i=0;i<pattern.vertexNum;i++)
    for(int j=0;j<graph.vertexNum;j++)
        tmp[i][j]='-';

tmp2=new char *[pattern.vertexNum];
for(int i=0;i<pattern.vertexNum;i++)
    tmp2[i]=new char[pattern.vertexNum];
for(int i=0;i<pattern.vertexNum;i++)
    for(int j=0;j<pattern.vertexNum;j++)
        tmp2[i][j]='-';

for(int j=0;j<pattern.vertexNum;j++)
    for(int i=0;i<graph.vertexNum;i++)
        if(p[j][i])
            for(int m=0;m<graph.vertexNum;m++)
                tmp[j][m]=graph.G[i][m];

for(int m=0;m<pattern.vertexNum;m++)
    for(int i=0;i<graph.vertexNum;i++)
        if(pt[i][m])
            for(int j=0;j<pattern.vertexNum;j++)
                tmp2[j][m]=tmp[j][i];

for(int i=0;i<pattern.vertexNum;i++)
{
    for(int j=0;j<pattern.vertexNum;j++)
        if(pattern.P[i][j]!='-' && tmp2[i][j]!='-')
            if(pattern.P[i][j] != tmp2[i][j])
            {
                flg=false;
                break;
            }
    if(!flg)
        break;
}
if(flg)
    return true;
else
    return false;}

最佳答案

看起来您正在为大小传递 -1,因为 4294967295 对应于 0xFFFFFFFF,即二进制补码表示中的负数.

由于您传递给 new [...] 的唯一值是 vertexNum,因此您需要检查该值。在函数顶部添加一个条件,以查看 graph.vertexNumpattern.vertexNum 是否为负数,在条件内设置断点,然后查看代码的哪一部分正在进行无效调用:

void ullman(Graph &graph,Pattern pattern,int **p,int k) {
    if(pattern.vertexNum < 0) {
        cerr << "pattern.vertexNum is negative" << endl; // Set brekpoint here
    }
    bool flg=true;
    ... // The rest of your code
}

关于c++ - 分配大小无效 : 4294967295 byte,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32272280/

相关文章:

c++ - 为什么 free() 没有释放我的 Arduino Uno 上的 RAM

c++ - QMap函数: check it contains isbn number

visual-studio - NuGet 包在 Visual Studio 2015 中不起作用

iPad 和内存问题

memory-management - 线性地址和物理地址

c# - 调试多维数组 C#

c++ - 删除依赖中未使用的方法

c++ - 用于检测音频过零的选项

c++ - 如何解决由于参数中的默认构造函数导致的函数重载不明确

visual-studio - 在 Visual Studio 2017 中使用 64 位 Visual C++ 工具集