【问题标题】:about allocating 2 dimentional array关于分配二维数组
【发布时间】:2016-11-29 15:02:00
【问题描述】:

我很抱歉我的英语很差。 我正在使用VS2013。 我正在制作动态数组,这是我的代码。

char ** files = new char*[4];
cout << files << endl;
files[0] = new char[4 * 50];
cout << files[0][0] << endl;

for (int i = 1; i < 4; i++)
{
    files[i] = files[i - 1] + 50;
}

我想如果我将 4 和 4*50 更改为变量。我可以制作动态数组。呃..我的意思是动态分配。但这就是问题所在。

//do something...
delete files[0];
delete files;

此代码出现错误。可能我删除了两次。 (块类型为 Valid pHead->nBlockUse ) 但是,在我看来,首先,我必须通过删除文件来删除 char 数组 [0] 然后我必须通过删除文件来删除 char 指针数组。 但是强大的编译器说我做错了。 帮帮我!~

【问题讨论】:

  • 你能告诉我们错误信息吗?
  • (Block Type is Valid pHead->nBlockUse ) 这是错误信息
  • 表达式:_CrtlsValidHeapPointer(puserData)
  • 我认为是关于字符串的...

标签: arrays memory


【解决方案1】:

实际上,您没有使用正确的 C++ 原语来删除数组。

如果你分配一个带有new的单个对象,你可以使用delete来释放它:

char *p = new char;
...
delete p;

当你用new T[]分配一个对象数组时,你必须使用delete[]来释放数组:

char *p = new char[N];
...
delete[] p;

所以在你的例子中,你应该这样做:

delete[] (files[0]);
delete[] files;

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多