今天调一个计算矩阵的东西出来这样一个运行时的错误, 还是第一次遇到。
-----------------------------------------------------
*** glibc detected *** free(): invalid next size (normal): 0x093efc48 ***
forrtl: error (76): IOT trap signal
-------------------------------------------------------
查了一下, 是内存泄露的问题。 一般是free了没有分配的内存, 还有就是分配了内存忘记释放也有可能会出现这样的问题。 我们这个程序里面两种情况都没有, 最后查出来是数组循环的时候越界了 , 写到了其他的内存里面, 然后一free那个区域就出现了这样的问题。 推荐这个
Valgrind的工具, 我的可爱师傅找到的, 号称可以调试Linux下所有内存问题, 听起来不错。 调试的时候, 可以指出哪一行执行了非法的内存操作, 找起来也很方便---至少对我们这种单线程的小规模程序很方便。
其实真正想说的就是今天走在路上无意中想到的双节棍:
他们的学生我习惯
从小就耳濡目染
什么数组和链表我都耍得有模有样
什么兵器最喜欢
有向图柔中带刚
想要去三楼厕所旁边学优化的秘方
……
这个故事告诉我们, 选一个地理位置好的实验室对每天进行某些人类必需活动的时候的方便程度有多么大的帮助阿。
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=1032486