C++ new申请二维数组能否使用非常量入参

jeff_
  • 43

前提:需要一个二位数组,非常量输入作为数组下标。知道可以用Vector实现,但是因为最近工作原因都是用的C语言开发,C++一些特性忘记了。

请教下C++ 除了用For循环,与兼容C的malloc,是否可以用C++的new实现下面内容。

string s;
cin >> s;
int slength = s.length();

bool (*dp)[slength] = (bool(*)[slength])malloc(sizeof(bool) * slength * slength);

直接使用下面代码报错:

bool (*dp)[slength] = new bool[slength][slength];

报错信息:

.\main.cpp: In member function 'std::__cxx11::string Solution::longestPalindrome(std::__cxx11::string)':
.\main.cpp:174:56: error: array size in new-expression must be constant
         bool (*dp)[slength] = new bool[slength][slength];
                                                        ^
.\main.cpp:174:56: error: the value of 'slength' is not usable in a constant expression
.\main.cpp:167:13: note: 'int slength' is not const
         int slength = s.length();
             ^~~~~~~
回复
阅读 442
3 个回答
✓ 已被采纳

这个是不行的,这里第二维(下标)必须是确定的才行。

给你一个例子,虽然比较麻烦,是能实现你想要的效果的。

void arrary2d(int slength)
{
    // 分配
    int** a = new int*[slength];
    for (int i = 0; i < slength; i++)
        a[i] = new int[slength];

    // 测试
    for (int i = 0; i < slength; i++)
    {
        for (int j = 0; j < slength; j++)
        {
            a[i][j] = i * slength + j;
            printf("%d, ", a[i][j]);
        }
        printf("\n");
    }

    // 释放
    for (int i = 0; i < slength; i++)
        delete[] a[i];
    delete[] a;
}

int main()
{
    arrary2d(3);

    return 0;
}
你知道吗?

宣传栏