當我運行我的程序時我得到這個錯誤任何人都可以解釋這是什麼錯誤?運行程序時出錯?
*** Error in `./a.out': double free or corruption (out): 0x00000000022030e0 ***
Aborted (core dumped)
這裏是我的代碼
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string>
#include<string.h>
#include<iostream>
using namespace std;
struct node{
char data;
int freq;
struct node* left;
struct node* right;
};
struct my{
bool operator()(struct node* n1,struct node* n2){
return n1->freq<=n2->freq;
}
};
void print(struct node* root,char n[])
{
int i;
if ((root->left==NULL)&&(root->right==NULL))
{
cout<<n<<"\n";
//printf("%s\n",n);
}
if(root->left!=NULL)
{
int k=strlen(n);
n[k]='0';
n[k+1]='\0';
print(root->left,n);
n[k]='\0';
}
if(root->right!=NULL)
{
int k=strlen(n);
n[k]='1';
n[k+1]='\0';
print(root->right,n);
n[k]='\0';
}
return ;
}
int main()
{
int a[5]={1,1,2,3,5};
// priority_queue<struct node , vector<struct node>,my> q;
priority_queue<node*,vector<node*>,my> q;
for(int i=0;i<5;i++)
{
struct node* s=new node;
s->data=i;
s->freq=a[i];
s->left=NULL;
s->right=NULL;
q.push(s);
}
while(q.size()>=1)
{
struct node* a=q.top();
q.pop();
struct node* b=q.top();
q.pop();
struct node* c=new node;
c->freq=a->freq+b->freq;
c->left=a;
c->right=b;
q.push(c);
}
printf("0");
char n[100];
n[0]='\0';
struct node* d=q.top();
print(d,n);
return 0;
}
它顯示了執行最後一行之後錯誤。 *錯誤在./a.out': double free or corruption (out): 0x00000000015f50e0 *** Aborted (core dumped) *** Error in
./a.out「:雙重釋放或腐敗(出):0x00000000015f50e0 * 中止(核心轉儲)
這是運行程序時發生的錯誤,而不是編譯時。 – interjay
是的,你知道這是爲什麼嗎? –
正如錯誤所述,無論是兩次釋放相同的內存,還是有一些內存損壞。沒有代碼就難以說更多。 – interjay