📜  使用realloc()(1)

📅  最后修改于: 2023-12-03 14:49:51.221000             🧑  作者: Mango

使用realloc()函数 - 介绍

什么是realloc()函数?

realloc()是C语言中的一个内存分配函数,用于调整之前使用malloc()calloc()函数分配的内存块的大小。realloc()函数的原型如下:

void* realloc(void* ptr, size_t size);

realloc()函数接受两个参数:ptr是指向之前分配的内存块的指针,size是要调整的内存块的新大小(以字节为单位)。函数返回一个指针,指向调整大小后的内存块。

realloc()的用法

在使用realloc()函数时,需要注意以下几点:

  1. ptr参数不能是NULL指针。如果ptr是NULL指针,realloc()的行为就类似于malloc()函数,用于分配新的内存块。
  2. size参数不能为0。如果size为0,realloc()的行为就类似于free()函数,用于释放ptr指向的内存块。
  3. 调用realloc()函数后,原有的内存块内容会被复制到新分配的内存块中,如果新分配的内存块比原内存块小,可能会发生数据丢失。
  4. 如果realloc()函数失败,会返回NULL指针。此时原有的内存块仍然有效,不能再被访问,应该考虑其他处理方式。
realloc()使用示例

下面是一个使用realloc()函数的示例代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
    // 分配一个初始大小为5的int数组
    int* array = (int*)malloc(5 * sizeof(int));

    // 初始数组内容为[0, 1, 2, 3, 4]
    for (int i = 0; i < 5; i++) {
        array[i] = i;
    }

    // 调整数组大小为10
    int* resizedArray = (int*)realloc(array, 10 * sizeof(int));

    if (resizedArray != NULL) {
        // 调整大小成功,重新赋值10以后的元素
        for (int i = 5; i < 10; i++) {
            resizedArray[i] = i;
        }

        // 打印所有元素
        for (int i = 0; i < 10; i++) {
            printf("%d ", resizedArray[i]);
        }
        printf("\n");

        // 释放内存
        free(resizedArray);
    } else {
        printf("内存分配失败\n");
    }

    return 0;
}

在上述示例中,首先使用malloc()函数分配了一个初始大小为5的int数组。然后,使用realloc()函数将数组大小调整为10。重新分配的内存块中存储了原有数组的内容,并重新赋值10以后的元素。最后,打印所有元素并用free()函数释放内存。

注意,示例代码中会检查realloc()函数的返回值是否为NULL,以处理内存分配失败的情况。

总结

realloc()函数是C语言中用于调整内存块大小的重要函数。使用realloc()可以根据需要增加或减少已分配内存块的大小。然而,在使用realloc()时要注意参数的合法性以及对返回值进行判断,以确保应用程序的正确性和可靠性。