You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中char**二级指针如何分配3个char*指针内存?

错误原因

你触发编译错误的核心原因是C++的new运算符语法不允许在带括号的类型id后面直接跟数组维度声明:你写的(char *)会被编译器优先识别为placement new的参数段起始标记,后面跟[3]的数组维度写法不符合语法规则,就会抛出对应的报错。

正确写法

C++完全支持这类二级指针的内存分配,逻辑和C语言完全一致,只需要去掉类型外层多余的括号即可:

char **a;
// 分配可存储3个char*指针的连续堆内存
a = new char*[3];

这段代码在64位环境下会分配24字节的连续内存(单个char*占8字节,3个共24字节),赋值完成后你完全可以通过a[0]、a[1]、a[2]访问三个指针位置,后续再分别给这三个指针分配字符串存储内存,就能实现a[i][string_num]的访问形式,和C中用malloc(3 * sizeof(char*))的效果完全相同。

如果觉得指针数组的语法容易写错,也可以通过类型别名简化写法,避免语法歧义:

// C++11及之后版本可用
using char_ptr = char*;
// 旧版本C++可用typedef写法:typedef char* char_ptr;
char** a = new char_ptr[3];

内存释放注意事项

使用完内存后需要按层级释放,避免内存泄漏:先逐个释放a[0]、a[1]、a[2]指向的字符串内存,再释放存储三个指针的数组本身:

// 前提:已经给a[0]、a[1]、a[2]分配了对应的字符串堆内存
delete[] a[0];
delete[] a[1];
delete[] a[2];
delete[] a;
a = nullptr;

内容的提问来源于stack exchange,提问作者user786

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:48:22