C和C++中动态分配内存和删除内存的指令malloc()和new()

在C和C++中,动态分配内存的指令是使用malloc函数(C)或new运算符(C++)。这些指令用于在运行时分配指定大小的内存块。

在C中,动态分配内存的指令是malloc函数,它声明为:

void* malloc(size_t size);

示例用法:

int* ptr = (int*)malloc(sizeof(int) * n);  // 分配n个int类型大小的内存块

在C++中,动态分配内存的指令是new运算符,它有多种形式,其中最常见的形式是:

new 类型名;

示例用法:

int* ptr = new int;  // 分配一个int类型大小的内存块

当我们使用动态分配的内存完成任务后,需要显式地删除分配的内存以避免内存泄漏。在C中,可以使用free函数来释放使用malloc函数分配的内存:

free(ptr);  // 释放指针ptr指向的内存

在C++中,可以使用delete运算符来删除使用new运算符动态分配的内存:

delete ptr;  // 删除指针ptr指向的内存

如果我们使用new运算符分配了一个数组,需要使用delete[]来删除内存:

delete[] ptr;  // 删除指针ptr指向的数组内存

请注意,动态分配的内存在使用完成后一定要手动释放,否则会导致内存泄漏。




举例说明:
当使用C语言时,可以使用以下示例进行动态内存分配和释放:

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

int main() {
    int n;
    printf("请输入数组大小:");
    scanf("%d", &n);

    int* ptr = (int*)malloc(sizeof(int) * n);
    if (ptr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }

    printf("请输入%d个整数:\n", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &ptr[i]);
    }

    printf("数组元素为:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", ptr[i]);
    }
    printf("\n");

    free(ptr);

    return 0;
}

当使用C++时,可以使用以下示例进行动态内存分配和释放:

#include <iostream>

int main() {
    int n;
    std::cout << "请输入数组大小:";
    std::cin >> n;

    int* ptr = new int[n];

    std::cout << "请输入" << n << "个整数:" << std::endl;
    for (int i = 0; i < n; i++) {
        std::cin >> ptr[i];
    }

    std::cout << "数组元素为:" << std::endl;
    for (int i = 0; i < n; i++) {
        std::cout << ptr[i] << " ";
    }
    std::cout << std::endl;

    delete[] ptr;

    return 0;
}

这些示例分别演示了在C和C++中如何动态分配内存,并最终通过调用free(在C中)和delete[](在C++中)释放内存。



malloc和new的返回值类型和值分别是什么?
在C语言中,malloc函数的返回类型是void*,它返回一个指向分配内存块的指针。如果内存分配成功,malloc函数将返回指向分配内存块的指针;如果内存分配失败,它将返回NULL

示例用法:

int* ptr = (int*)malloc(sizeof(int) * n);
if (ptr == NULL) {
    printf("内存分配失败\n");
    return 1;
}

在C++语言中,new运算符的返回类型与所分配对象的类型相匹配。如果是分配一个单个对象,new返回所分配对象的指针;如果是分配一个对象数组,new将返回指向数组第一个元素的指针。

示例用法:

int* ptr = new int;  // 分配一个int类型大小的内存块
if (ptr == nullptr) {
    cout << "内存分配失败" << endl;
    return 1;
}
int* arr = new int[n];  // 分配一个int类型的数组
if (arr == nullptr) {
    cout << "内存分配失败" << endl;
    return 1;
}

无论是在C还是C++中,当动态内存分配失败时,返回的指针为NULL(在C中)或nullptr(在C++中),这是为了作为内存分配失败的标识,程序可以据此进行相应的错误处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九层指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值