____folderpath____ /home/thinkycx/.vim/bundle/vim-cpp-enhanced-highlight/test
a.out: malloc.c:2394: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
[1] 71581 abort (core dumped) ./a.out
GDB运行程序后,bt回溯定位到程序代码:
struct ____foldernode____ *____foldernew____;
____foldernew____ = malloc(sizeof(struct ____foldernode____));
____foldernew____->____path____ = malloc(strlen(____folderpath____));
strcpy(____foldernew____->____path____, ____folderpath____);
printf("____foldernew____->____path____ %s\n", ____foldernew____->____path____);
____foldernew____->____next____ = NULL;
修改为:
struct ____foldernode____ *____foldernew____;
____foldernew____ = malloc(sizeof(struct ____foldernode____));
____foldernew____->____path____ = malloc(strlen(____folderpath____)+1);
strcpy(____foldernew____->____path____, ____folderpath____);
printf("____foldernew____->____path____ %s\n", ____foldernew____->____path____);
____foldernew____->____next____ = NULL;
本质原因是strlen计算字符串长度,不会包括\0,因此malloc申请 用于拷贝该字符串 来存储的空间时size需要+1。