繁体   English   中英

在外部函数中释放指针的指针

[英]Freeing a pointer of pointers in outside function

p1 指针用于其他功能,没有任何变化。 并且当不再需要调用free_stuffs函数但调用free_stuffs时,我得到双重释放或损坏(输出)中止(核心转储)

char **someFunction(){
 const char ** p1 = (char **)malloc(total * sizeof(char *));
    for (int i = 0; i <= total; i++){
        *(p1 + i) = (char *)malloc(len * sizeof(char) +1);
    }
    return p1;
}
void free_stuffs(char ** p1){
   for (int i = 0; i <= total; i++){
      free(p1[i]);
   }
   free(p1);
}

您只分配total元素,但使用total+1元素( 0total )。

分配足够的元素来修复错误。

char **someFunction(){
 /* allocate total+1 elements instead of total */
 const char ** p1 = malloc((total + 1) * sizeof(char *));
    for (int i = 0; i <= total; i++){
        *(p1 + i) = malloc(len * sizeof(char) +1);
    }
    return p1;
}

另请注意, malloc()系列的强制转换结果被认为是一种不好的做法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM