有关memset后free的有关问题
有关memset后free的问题
在代码中我申请了一块内存: char *s_str = (char *)malloc(1024); 在代码块中执行memset(s_str, 0, 1024),以后free(s_str); 可以顺利执行,可是在执行完memset(s_str, 0, strlen(s_str)) 后再free(s_str); 就会报断点错,请问有哪位大虾可以解释下具体原因么?
------解决方案--------------------
------解决方案--------------------
strlen返回的是分配的空间中字符串的空间
------解决方案--------------------
strlen 返回的并非s_str大小,而是以s_str地址开始的字符串长度,由于你此时并未初始化,此字串内容随机.
------解决方案--------------------
strlen大于1024之后置0则可能会把字符串数组后面的控制信息给覆盖了
这些信息都是在free中需要的,当然要出错了
在代码中我申请了一块内存: char *s_str = (char *)malloc(1024); 在代码块中执行memset(s_str, 0, 1024),以后free(s_str); 可以顺利执行,可是在执行完memset(s_str, 0, strlen(s_str)) 后再free(s_str); 就会报断点错,请问有哪位大虾可以解释下具体原因么?
------解决方案--------------------
------解决方案--------------------
strlen返回的是分配的空间中字符串的空间
------解决方案--------------------
strlen 返回的并非s_str大小,而是以s_str地址开始的字符串长度,由于你此时并未初始化,此字串内容随机.
------解决方案--------------------
strlen大于1024之后置0则可能会把字符串数组后面的控制信息给覆盖了
这些信息都是在free中需要的,当然要出错了