C 这会释放我所有的**指针内存吗?

C 这会释放我所有的**指针内存吗?,c,pointers,C,Pointers,我试图取消分配*指针,如果它在程序结束时已经分配了某些内容。这是正确的方法吗? 指针位于另一个带参数的函数中(char**mena)。 这似乎是可行的,因为当我试图打印之后的值时,程序崩溃了。我只是想确定一下 int n(FILE *file, char ***mena,int already){ //var declaration if (already) { for (i=0;i<already;i++) free((*mena)[i

我试图取消分配*指针,如果它在程序结束时已经分配了某些内容。这是正确的方法吗? 指针位于另一个带参数的函数中(char**mena)。 这似乎是可行的,因为当我试图打印之后的值时,程序崩溃了。我只是想确定一下

int n(FILE *file, char ***mena,int already){
 //var declaration

  if (already) {
          for (i=0;i<already;i++)
            free((*mena)[i]);

          free(*mena);
          *mena=NULL;
     }
// function continues.....
int n(文件*FILE,字符***mena,int已存在){
//var声明
如果(已经){

对于(i=0;i),这很难说,因为这取决于这些指针的分配方式

但是,由于指针有3层深,我认为仅仅释放它们是不够的

您应该看看像
valgrind
这样的工具,它可以帮助您识别内存泄漏

解释一下,
char***
意味着你有一个指向char指针的指针。这意味着指针指向一个可以静态或动态分配的内存区域。其他所有级别都是如此


你必须
free()
确切地说,那些动态创建的级别,即通过
malloc()
calloc()
realloc()
strdup()
strdup>动态创建的级别,如果我们不知道它是如何分配的,就不知道如何释放。我明白了-我想我知道你的意思。我必须清除每个[i][j]子块,然后清除每个子块[i] 块,然后将整个指针设为100%…我想我理解了,谢谢:)