无效的分配大小:4294967295字节
Invalid allocation size: 4294967295 byte
我正在编写关于ullman算法的代码,当我运行我的程序时,我遇到了:"无效的分配大小:4294967295字节"错误。可能是关于向量的?还有别的吗?有谁能帮我一下吗?
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
,即2的补码表示中的负1。
由于您传递给new [...]
的唯一值是vertexNum
,因此这是您需要检查的值。在函数的顶部添加一个条件,查看graph.vertexNum
或pattern.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
}
相关文章:
- 为什么动态分配的内存总是16字节对齐
- 如何使用 new in C++ 分配字节数内存
- 动态分配 8 字节的内存
- 为什么 new 第一次分配 1040 个额外的字节?
- CopyMemory 复制的字节数比 VirtualAlloc 分配的字节多呢?
- 为什么分配的变量地址之间相差 16 个字节?
- Valgrind:将一个指针分配给另一个指针后丢失字节
- 如果Malloc无法分配X字节,我应该使用Realloc还是再次使用Malloc?C++
- 将分配的前 16 个字节的内存强制转换为 UDT
- 如何使用调用和分配指令在 llvm 字节码中查找类名
- 我正在尝试在类中动态分配静态字节板[67]
- 分配大小无效:4294967295 字节
- 无效的free() / delete / delete[] / realloc(), 4 字节在大小为 16 的块内分配
- c++堆分配默认为32字节对齐
- new分配了多少字节
- 为什么 2^80 字节的内存分配不会失败?
- C++强制 new[] 不分配 4 个额外的字节
- 通过取消引用指向字节数组的指针来分配值是错误的吗?
- C++ 分配期间 NaN 字节表示形式发生变化
- 无效的分配大小:4294967295字节