关于毕设的莫名c++ Bug
运行环境:gcc-7.3 ubantu-18.04
这些诡异的是往往之前还能运行,写着写着突然在某个点报错,人傻了。毕设项目中为了让程序有可移植性,有大量的变量进行了内存对齐,不知道是不是这个原因导致了出现了这么多诡异bug。
-
vector的push_back报错
如图,sch是一个vector<int *>类型,,,用sch.push_back(row),会突然报错,用insert后又突然变好了,不理解。 -
bitmatrix在类中位置定义问题
如图,最后一个变量,只能放在类中的末尾,该变量随后会进行如下申请变量空间
bitmatrix = (int*)malloc(R*realK*R*2*sizeof(int));
memset(bitmatrix,0,R*realK*R*2*sizeof(int));
如果这个变量声明不在类中的末尾,函数调用完后就会报错(出现段错误),,不懂。
- *vector<char >在类中位置定义问题
同样,这个地方也是,这个vector<char *> intermedia 变量只能摆在末尾,本来这个变量定义在private中的,但是死活报错,最后放在public末尾后,问题解决了,不懂。。这个变量后续操作。
for(int i = 0;i<xc->intermedia_schedule.size();i++)
{
char *tmp=NULL;
int ret=posix_memalign((void**)&tmp,64,packetsize);
if (ret) {
fprintf (stderr, "posix_memalign: %s\n", strerror (ret));
}
intermedia.insert(intermedia.end(),tmp);
}
printf("intermedia_size: %d xc->inter.size: %d\n",intermedia.size(),xc->intermedia_schedule.size());
其中tmp用了数据对齐,但是感觉与报错无关,,这个for循环是循环了正确次数,,但是一打印intermedia的大小,,显示负数或者几百万这种,,,不懂。。
- delete导致报错
我不懂就这一段函数,,之前都运行好好的,咋就突然报错呢,,报错显示
double free or corruption (out)
应该是多重free造成的,,那我寻思着之前咋就能运行呢,后面才报错,。不理解