代码之家  ›  专栏  ›  技术社区  ›  Dennis Haarbrink

指针最佳实践

  •  4
  • Dennis Haarbrink  · 技术社区  · 14 年前

    我刚刚开始学习C语言,而且(当然)正在努力学习指针:)

    int *storage, *storage_p;
    storage = malloc(sizeof(int[GROW_BY]));
    storage_p = storage;
    // do something with storage, using storage_p
    free(storage);
    storage = NULL;
    

    有必要声明两个变量来处理 malloc() storage storage_p 像我做的那样?如果不是,什么是“方法”?

    7 回复  |  直到 14 年前
        1
  •  3
  •   James Curran    14 年前

    如果您计划使用的存储将改变它的值,那么您将需要两个指针。

    但是,我通常保留纯初始指针,并根据需要创建新的临时指针。

    int *storage = (int*) malloc(sizeof(int[GROW_BY])); 
    // :
    int* ptr = storage;
    while (*ptr)
    {
      // :
      ++ptr;
    }
    
        2
  •  2
  •   Bob Fincheimer    14 年前

    我只会复制malloc创建的指针,原因只有一个:我想修改它。

    例如,如果您正在迭代使用malloc分配的字符数组,我会将指针复制到一个新变量以进行迭代,并保持第一个变量不变。

    另外,在动态分配方面,看看免费列表,它们简化了很多:

    http://en.wikipedia.org/wiki/Free_list

        3
  •  1
  •   eruciform    14 年前

    我建议不要有指针的副本。它只是增加了一个悬挂的自由指针的机会,你可能会不小心使用以后,或一个额外的副本,你可能不想释放,或一个额外的副本,你可能不想双重释放。我个人认为没有必要 storage_p 在这里。

    古尔:

    int *storage = malloc(size_of_whatever);
    storage[0] = do_something();
    free(storage);
    storage = NULL;
    

        4
  •  1
  •   Jerry Coffin    14 年前

    不,我看不出你两样都有什么收获 storage storage_p

        5
  •  1
  •   Larry Wang    14 年前

    你可能想这样做的原因是因为在你用 storage free() storage_p free(storage_p) 存储

    举个例子:

    int *storage;
    storage = malloc(sizeof(int[GROW_BY]));
    storage++;
    free(storage); //SEGFAULT or MEMORY LEAK or OTHER BAD STUFF
    storage = NULL;
    

    int *storage, *storage_p;
    storage = malloc(sizeof(int[GROW_BY]));
    storage_p = storage;
    storage++;
    free(storage_p);
    storage_p=NULL;
    storage = NULL;
    
        6
  •  0
  •   Thom Smith    14 年前

        7
  •  0
  •   NamoDawn    7 年前

    如果有的话,它只会不必要地添加行和损害可读性。