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;
}

  

posted on 2012-09-22 11:16  cpp255  阅读(422)  评论(0编辑  收藏  举报

导航