21xrx.com
2024-11-05 22:34:19 Tuesday
登录
文章检索 我的文章 写文章
C++动态数组内存分配
2023-06-26 22:53:26 深夜i     --     --
C++ 动态数组 内存分配

C++中动态数组内存分配是一个重要的话题,因为动态数组通常需要在运行时动态分配内存。在C++中,使用关键字new来动态分配内存。我们可以使用new运算符来动态分配一个数组,如下:


int* ptr = new int[num];

上面的代码创建了一个包含num个整数的数组,使用指针ptr来指向这个数组的第一个元素。我们可以使用数组下标操作符[]来访问该数组的元素,如下:


ptr[0] = 100;

ptr[1] = 200;

...

ptr[num-1] = 1000;

我们也可以使用指针变量ptr来遍历整个数组,如下:


for (int i = 0; i < num; i++) {

  cout << ptr[i] << " ";

}

在使用完动态分配的数组后,一定要使用delete运算符来释放内存,如下:


delete[] ptr;

不释放动态分配的内存可能会导致内存泄漏,从而导致程序内存使用过多,甚至造成程序崩溃。

在动态分配数组时,另一个重要的问题是分配后的数组大小不能改变。如果我们需要改变数组大小,可以采用以下方法:

1. 使用realloc函数来重新分配内存。realloc函数能够调整先前分配空间的大小,该函数通常是malloc的扩展版本。使用realloc函数可支持动态增加或缩减数组大小,如下:


// 动态增加数组大小

int* ptr = (int*)realloc(ptr, newsize * sizeof(int));

// 动态缩减数组大小

int* ptr = (int*)realloc(ptr, newsize * sizeof(int));

需要注意,使用realloc函数时需要判断新分配空间的大小是否大于等于原空间的大小,否则可能会造成极端情况下的内存泄漏。

2. 重新分配一个新的数组,将原数组的数据复制到新数组中。这种方法通常是采用指针和new运算符,先创建一个新的数组,然后将原数组的数据复制到新数组中,如下:


int* newptr = new int[newsize];

for (int i = 0; i < min(num, newsize); i++) {

  newptr[i] = ptr[i];

}

delete[] ptr;

ptr = newptr;

使用这种方法,需要先通过new运算符申请一个新的数组,然后将原数组的数据复制到新数组中,最后释放原数组的内存,将指针指向新数组。

无论采用哪种方法,对于动态数组的内存分配和释放,我们都必须非常小心。只有正确而谨慎地使用动态数组,才能确保编写出可靠、高效的C++程序。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复