2015-08-28 73 views
1

我正在編碼關於ullman算法,並且當我運行我遇到的程序時: 「分配大小無效:4294967295字節」錯誤。它可能是關於矢量?還是其他什麼?有什麼可以幫助我嗎?無效的分配大小: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

讓我猜猜,32位操作系統? – SingerOfTheFall

+1

看看這個鏈接.. 「http://stackoverflow.com/questions/23470003/why-am-i-getting-invalid-allocation-size-4294967295-bytes-instead-of-anstd」 –

回答

2

看起來你是路過-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 
} 
相關問題