C/C++经验技巧总结

C 让一个动态数组具有自动增长的能力

2018-03-23  本文已影响12人  XDgbh
int current_element = 0;
int total_element = 128;
char *dynamic_arr = (char *)malloc(total_element);
void add_element(char c)
{
  if(current_element == total_element-1)
  {
    char *p_temp = NULL;    //很关键
    total_element*=2;    //给内存扩容,一般都是直接扩大为2倍
    p_temp = (char *)realloc(dynamic_arr, total_element);
    if(p_temp == NULL) 
    {
      printf("扩展表内存失败!");
      return;
    }
    dynamic_arr = p_temp;
  }
  current_element++;
  dynamic_arr[current_element] = c;
}

很关键的一点:设置临时指针p_temp
如果不设置临时指针p_temp作为过渡,而是直接dynamic_arr = (char *)realloc(dynamic_arr, total_element);,很容易在realloc()函数失败时返回NULL而使得指针dynamic_arr被赋值NULL,导致原先的数组失去指针而无法访问,造成内存泄漏。出大问题

上一篇 下一篇

猜你喜欢

热点阅读