次のように文字列をベクターにプッシュすると、何が問題になりますか。
globalstructures->schema.columnnames.push_back("id");
コードにvalgrindを適用すると、表示されます
1 ブロックで 27 バイトが失われる可能性があり、19 の損失レコード 7 で失われる可能性があります。
そのように、非常に多くの場所で失われた可能性が示されています...これにより、割り当てと解放が一致しません....その結果、次のような奇妙なエラーが発生します
malloc.c:そのようなファイルまたはディレクトリはありません
コードのどこでもメモリの割り当てにcallocを使用していますが、次のような警告が表示されます
システムコール パラメータ write(buf) が初期化されていないバイトを指しています
そのエラーの原因となっているコードは
datapage *dataPage=(datapage *)calloc(1,PAGE_SIZE);
writePage(dataPage,dataPageNumber);
int writePage(void *buffer,long pagenumber)
{
int fd;
fd=open(path,O_WRONLY, 0644);
if (fd < 0)
return -1;
lseek(fd,pagenumber*PAGE_SIZE,SEEK_SET);
if(write(fd,buffer,PAGE_SIZE)==-1)
return false;
close(fd);
return true;
}
gdbを実行しているときに発生する正確なエラーは...
ブレークポイント 1、getInfoFromSysColumns (tid=3、numColumns=@0x7ffffffffdf24: 1、typesVector=...、constraintVector=...、lengthsVector=...、columnNamesVector=...、offsetsVector=...) dbheader.cpp で:1080
プログラム受信信号 SIGSEGV、セグメンテーション違反。
_int_malloc (av=0x7ffff78bd720, bytes=8) at malloc.c:3498 3498 malloc.c: そのようなファイルまたはディレクトリはありません。
valgrindで同じことを実行すると、うまくいきます...