如果我们像这样将字符串推入向量中会出现什么问题:
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=@0x7fffffffdf24: 1, typesVector=..., constraintsVector=..., lengthsVector=..., columnNamesVector=..., offsetsVector=...) 在 dbheader.cpp :1080
程序收到信号 SIGSEGV,分段错误。
_int_malloc (av=0x7ffff78bd720, bytes=8) at malloc.c:3498 3498 malloc.c: 没有这样的文件或目录。
当我通过 valgrind 运行它时,它工作正常......