【发布时间】:2019-12-27 18:24:38
【问题描述】:
我可以创建一个 3x2 整数的动态二维数组,并且可以毫无问题地删除它。但是当对一个二维字符串数组做同样的事情时,删除它会产生错误:
munmap_chunk(): 无效指针
为什么? 整数和字符串之间缺乏同质性使我无法编写可以用字符串实例化的模板。
我知道有自动指针。我知道原始语言数组有更好的选择。但我是一名教师,我正在尝试逐一介绍这些科目,所以我仍然无法使用那些更高级的主题。我试图用模板解释抽象类型的数据。
#include<string>
#include<iostream>
int main()
{
std::cout << "2d-ARRAY of ints" << std::endl;
int **a = new int*[3];
for(int i=0; i<3; i++)
a[i] = new int[2];
for(int i=0; i<3; i++)
delete a[i];
delete [] a;
std::cout << "2d-ARRAY of strings" << std::endl;
std::string **s = new std::string*[3];
for(int i=0; i<3; i++)
s[i] = new std::string[2];
for(int i=0; i<3; i++)
delete s[i];
delete [] s;
return 0;
}
【问题讨论】:
-
你是一名老师......你为什么要教创建这样的二维数组?使用 std::vectors。
-
固定大小使用
std::array,否则使用std::vector,我看不出有什么理由在这里输入这些困难 -
"所以我仍然不能使用那些更高级的主题" ...使用 c-arrays 和适当的手动内存管理是超级先进的。使用
std::vector很容易。 -
我怀疑在教授标准容器之前教授模板是否符合逻辑顺序。您无需了解模板即可了解
vectors 或如何使用它们。您只需要了解模板即可实现它们。标准容器应该是早期教授的内容之一。甚至可能在动态分配和 C 数组之前。 -
你决定教授“基本”但明显容易出错的内存管理,而不是“更高级的主题”,这是否是故意讽刺的,即使你也无法正确? :)
标签: c++ arrays string multidimensional-array delete-operator