char * 指针

int main(void)
{
char *p1 = NULL, *p2 = NULL, *p3 = NULL;

    /* 1. malloc */
    p1 = malloc(10);
    strcpy(p1, "hello");    
    printf("p1 = %s\n", p1);
    free(p1);

    /* 2. calloc */
    p2 = calloc(5, 2);
    strcpy(p1, "hello");
    printf("p2 = %s\n", p1);
    free(p2);

    /* 3. realloc */
    char *new_p = NULL;
    new_p = malloc(1);
    strcpy(new_p, "hello");
    p3 = realloc(new_p, 10);//将new_p指向的内容复制到普新开得空间
    printf("p3 = %s\n", p3);
    free(p3);

    return 0;

}
运行结果:
这里写图片描述

<think>我们正在讨论C++中如何给char*指针分配内存。根据问题,用户要求使用中文回答,并在最后提出3-5个相关问题,且以“§§相关问题§§”开头。 在C++中,给char*指针分配内存通常有两种方式:使用new运算符或使用C标准库的malloc函数。但需要注意,在C++中更推荐使用new,因为它是C++原生的内存分配方式,并且可以与delete运算符配合使用,避免内存泄漏。 我们将按照以下步骤回答: 1. 介绍使用new分配内存的方法。 2. 介绍使用malloc分配内存的方法(注意:在C++中,虽然可以使用,但一般不建议,除非与C代码交互)。 3. 强调内存释放的重要性。 4. 示例代码。 5. 注意事项(如错误处理、初始化等)。 然后,根据回答提出3-5个相关问题。 注意:用户的问题是关于“c++给char*指针分配内存”,所以我们的回答将围绕这个主题。 回答如下:</think>### 如何在 C++ 中为 char* 指针分配内存 在 C++ 中为 `char*` 指针分配内存主要有两种方式,根据使用场景选择合适的方法: #### 1. **使用 `new[]` 运算符(推荐)** ```cpp // 分配 100 字节的内存 char* buffer = new char[100]; // 使用示例 strcpy(buffer, "Hello, World!"); // 必须手动释放内存 delete[] buffer; ``` **特点**: - 是 C++ 原生内存分配方式 - 分配失败时抛出 `std::bad_alloc` 异常 - 需严格配对使用 `delete[]` 释放 #### 2. **使用 C 标准库函数 `malloc()`** ```cpp #include <cstdlib> // 分配 100 字节的内存 char* buffer = static_cast<char*>(malloc(100)); // 使用示例 sprintf(buffer, "Data: %d", 42); // 释放内存 free(buffer); ``` **特点**: - 与 C 语言兼容 - 分配失败返回 `NULL` - 需配对使用 `free()` 释放 #### ⚠️ 关键注意事项 1. **内存释放**:必须成对释放(`new[]` → `delete[]`,`malloc` → `free`),否则会导致内存泄漏 2. **初始化**:分配的内存可能包含随机值,建议用 `memset(buffer, 0, size)` 清零 3. **异常处理**: ```cpp try { char* ptr = new char[1000000000]; // 尝试分配大内存 } catch (const std::bad_alloc& e) { std::cerr << "内存分配失败: " << e.what(); } ``` 4. **现代替代方案**:优先考虑 `std::vector<char>` 或 `std::string` 自动管理内存 #### 内存布局示例 ``` buffer → [0x00] [0x01] ... [0x63] // 100字节连续内存 ↑ 首地址 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值