马洛克之后的意外角色



我有一些这样的代码:

        ............                    
        char *old = NULL ;
        char *new = NULL;
        char *b1 = malloc(strlen(b) + 1);
        memcpy(b1,b,strlen(b) + 1);
        char *c;
        for(c = strtok_r(b1,"=",&saveptr3) ; c != NULL ; c = strtok_r(NULL,"=",&saveptr3)){
            fprintf(f,"c: %sn",c);
            if(fl == 0) {                       
                fprintf(f,"old1: %sn",old);    
                old = malloc(strlen(c) + 3 );
                fprintf(f,"old2: %sn",old);
                strcat(old,"=:");
                strcat(old,c);
                fprintf(f,"old3: %sn",old);    
                fl++;
            } else {
                new = malloc(strlen(c) + 1);
                strcat(new,"=");
                strcat(new,c);
                if(!sql) {
                    sql = malloc(strlen(first_part) + 1);                       
                    sql = str_replace(first_part,old,new);
                } else {
                    sql = str_replace(sql,old,new);
                }   
            }
       .....................

你可以看到,我有old变量,malloc并使用strcat为其附加一些文本

但是当我打印它时,我得到了一个意想不到的字符(▒▒X▒8)发出malloc

old1: (null)
old2: ▒▒X▒8
old3: ▒▒X▒8=:C1

我用free清除old变量后使用,但是我的程序永远挂起,我必须强制kill

请告诉我有什么问题.

如果你用 malloc 请求内存,它是单位化的(即可以包含随机数据)。使用例如 calloc是否要将其初始化为零。

这就是为什么

           old = malloc(strlen(c) + 3 );
           fprintf(f,"old2: %sn",old);

仅打印随机数据。您至少需要在malloc调用后设置old[0]='';

最新更新