C 内存free()出错
搞了大半年的android,偶尔也玩玩python,冷落了C好久。昨晚要做一个实验:把一个字符串的奇偶位的字符交换值,用C实现。
开始觉得挺简单的,几句代码就搞掂了,写了一下,发现是被代码搞掂我了。最开始的的做法是用指针交换值,发现运行就出错,搞了好久,最后招书看,才发现问题: ANSI C说明了修改字符串常量的值是未定义的行为。
改为修改字符串数组,测试正常,但是释放内存的时候又出错了:Debug error!(我是到底有多菜了);上网找了答案,找到原因:分配动态内存出错了,调用malloc的时候,最后一位是用来记录分配的内存大小和地址信息的,而我开始申请的刚好够用来存储字符串的信息,没有多开辟一个空间,改过后就正常了。
看来,语言这东西,还是得多学多练,常用啊。
void change_char(char *str)
{
int index;
int str_len;
char char_temp;
char *modify_char;
str_len = strlen((char const *)str);
modify_char = (char *)malloc((str_len + 1) * sizeof(char));
if(modify_char == NULL)
{
exit(1);
}
strcpy(modify_char, str);
for(index = 0; index < str_len - 1; index++)
{
char_temp = modify_char[index];
modify_char[index] = modify_char[index + 1];
modify_char[index + 1] = char_temp;
}
strcpy(str, modify_char);
free(modify_char);
modify_char = NULL;
}