new people*[]
时间: 2023-09-11 12:11:31 浏览: 54
在 C++ 中,使用 `new` 运算符可以在堆区动态地分配内存空间,而 `new` 运算符后面紧跟的是数据类型,表示需要分配的内存空间的类型。如果需要分配的是一个数组类型的内存空间,那么可以在 `new` 运算符后面使用方括号 `[]` 表示数组的大小。
而 `new people*[]` 则表示在堆区动态地分配一个 `people` 类型的指针数组。具体来说,它会分配一个连续的内存空间,其中每个元素都是指向 `people` 类型的指针。这个指针数组可以用于表示一个 `people` 类型的动态数组,其中每个元素都是指向一个 `people` 类型的对象的指针。
相关问题
为什么最后 newarr的堆释放了void add(people** arr, const int nov) { people* p = new people(); cout << "enter name" << endl; cin >> p->name; cout << "enter work" << endl; cin >> p->work; cout << "enter handlework" << endl; cin >> p->handlework; p->nov = nov; people** newarr = new people * [nov]; newarr[nov - 1] = p; for (int i = 0; i < nov - 1; i++) { newarr[i] = arr[i]; } //delete[]arr; *arr = *newarr; }
最后释放`newarr`的堆是因为在函数中我们使用了`new`关键字来分配了内存空间。当我们不再需要这个内存空间时,我们需要使用`delete`关键字来释放它,以避免内存泄漏。
在这段代码中,`newarr`是一个指向指针数组的指针。我们首先使用`new`关键字为`newarr`分配了一个长度为`nov`的指针数组。然后,我们将原始数组`arr`的元素复制到`newarr`中,并将新的指针数组赋值给原始数组`arr`。最后,我们没有释放`newarr`指向的内存空间。
为了正确释放内存,我们应该在函数的末尾添加以下代码:
```cpp
delete[] newarr;
```
这将释放`newarr`指向的指针数组所占用的内存空间。
cpp代码People::People(char* name, int age) : m_name(name), m_age(age) {} 后面People* p = new People("王志刚", 23);为什么报错?
这段代码可能报错的原因有很多,没有具体的错误信息很难确定。但是,根据代码片段来看,有可能出现以下几个问题:
1. 在使用 char* 类型作为字符串时,需要保证字符串以 '\0' 结尾。如果 name 没有以 '\0' 结尾,就会导致出现未知错误。
2. 如果 m_name 是一个 const char* 类型,那么需要使用字符串常量来初始化它,而不能使用 char* 类型的指针变量。
3. 如果 m_name 是一个 std::string 类型,那么需要将 char* 类型转换为 std::string 类型。
4. 如果 m_age 是一个 const int 类型,则需要在构造函数初始化列表中进行初始化,因为 const 类型的成员变量无法在构造函数中赋值。
总之,需要进一步分析具体的错误信息才能确定问题所在。