つまり、基本的には、fwrite と fread をそれぞれ使用して、キューのベクトルをバイナリ ファイルに読み書きできるかどうかを確認するテスト プログラムを作成していました。読み取りと書き込みの部分が正しく行われ、値が正しい場合でも、二重解放または破損エラーが発生します。テストコードは以下
#include <stdio.h>
#include <vector>
#include <queue>
int main(){
vector<queue<unsigned> > hello(17);
vector<queue<unsigned> > here(17);
queue<unsigned> temp;
for(int f=0;f<4;f++){//initialise a random queue
temp.push(f);
}
for(int i=0;i<hello.size();i++){//assign random queue to every index of vector
hello[i]= temp;
}
FILE *fo;
fo = fopen("hello","wb");
fwrite(&hello[0],sizeof(queue<unsigned>),hello.size(),fo);
fclose(fo);
printf("Writing done!\n");
FILE *fi;
fi=fopen("hello","rb");
fread(&here[0],sizeof(queue<unsigned>),here.size(),fi);
fclose(fi);
printf("Reading done!\n");
for(int i=0;i<here.size();i++){
printf("At key %d value at front is is %d",i,here[i].front());
here[i].pop();
printf(" value %d ",here[i].front());
here[i].pop();
printf(" value %d\n",here[i].front());
}
}
fread操作を行っているときにエラーが発生したようです。