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

动态创建的二维数组如何初始化?下述C++代码报错问题如何解决?

C++动态二维数组初始化错误问题分析与解决

代码存在的核心问题

  • 类型不匹配:你通过new bool[ROWS * COLUMNS]分配的是连续存储的一维bool数组,变量p是指向单个bool的指针,不支持嵌套二维初始化列表的赋值语法。
  • 语法规则不支持:C++标准不允许对new返回的动态原生数组直接使用大括号聚合赋值,new表达式返回的是右值,不能作为赋值操作的左操作数,就是你看到的lvalue required as left operand of assignment报错的来源。
  • 编译标准不匹配:大括号初始化列表是C11才引入的正式特性,你的编译器默认使用的是更早的C标准,就会触发对应的扩展初始化列表警告。

解决方法

方案1:适配一维动态数组的初始化写法

如果要保留连续内存的一维动态数组实现,把嵌套的二维初始化列表展开为一维即可,编译时添加-std=c++11或更高版本的标准参数即可正常编译:

#define ROWS 5
#define COLUMNS 5

int main(void)
{
    bool *p = new bool[ROWS * COLUMNS] {
        false, true, false, true, true,
        true, false, true, false, true,
        false, true, false, false, false,
        true, false, false, false, true,
        true, true, false, true, false
    };
    // 访问第i行第j列的写法:p[i * COLUMNS + j]
    // 使用完成后记得释放内存
    delete[] p;
    return 0;
}

如果需要兼容C++11之前的标准,先申请动态数组后逐元素赋值即可。

方案2:实现真正的二维动态数组

如果你要保留二维初始化列表的写法,可以分配指针数组形式的二维动态数组:

#define ROWS 5
#define COLUMNS 5

int main(void)
{
    bool **p = new bool*[ROWS] {
        new bool[COLUMNS] {false, true, false, true, true},
        new bool[COLUMNS] {true, false, true, false, true},
        new bool[COLUMNS] {false, true, false, false, false},
        new bool[COLUMNS] {true, false, false, false, true},
        new bool[COLUMNS] {true, true, false, true, false}
    };
    // 访问第i行第j列的写法:p[i][j]
    // 释放时需要先逐行释放,再释放指针数组
    for(int i = 0; i < ROWS; i++) {
        delete[] p[i];
    }
    delete[] p;
    return 0;
}

方案3:更推荐的现代C++写法

使用标准库容器std::vector,无需手动管理内存,也支持原生的二维初始化列表语法,代码更安全:

#include <vector>
#define ROWS 5
#define COLUMNS 5

int main(void)
{
    std::vector<std::vector<bool>> p = {
        {false, true, false, true, true},
        {true, false, true, false, true},
        {false, true, false, false, false},
        {true, false, false, false, true},
        {true, true, false, true, false}
    };
    // 直接使用p[i][j]访问元素,无需手动释放内存
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:24:03