ECE408@UIUC 报错free(): invalid next size (normal)解决

问题背景:ECE408 Project实现一个串行的CNN卷积层

ECE408@UIUC 并行编程 C++报错free(): invalid next size (normal)解决

问题背景:ECE408 Project实现一个串行的CNN卷积层

img

需要实现一个串行的实现达到教育我们串行跑CNN是一个时间非常长没有训练效率的东西(雾)

实现代码思路是纯串行:(以下是buggy version)

问题报错:

img

问题可以归结为:allocate的大小和free的大小不匹配,导致出现了一个invalid的free()错误

问题的关键在于合理的理解这个实现中convolution的意思

img

我们还是看这张图:这里的convolution做串行的矩阵应该是卷积后的小矩阵,所以串行应该改为:

这样就可以避免allocate和free的不匹配。

总结一下就是写代码的时候需要仔细check边界条件是什么,串行化的矩阵到底是哪一个。

还有一个比较有意思的点是为什么是free报错,有一个有意思的帖子

还有一个topic是为什么不是段错误而是free报错?

img

因为代码在服务器端运行,服务器端操作系统不一定会执行我们在linux或windows或osx上强制保护的机制,属于一种更general的保护。

 

留言

這個網誌中的熱門文章

ECE438@UIUC WSL中的VSCode C/C++编译环境出错

ECE408@UIUC MP5 CUDA C++实现并行计算的Reduction Tree Addition