You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.4 KiB
39 lines
1.4 KiB
#include <cstring> // 为了使用 memset
|
|
|
|
struct User {
|
|
char name[50];
|
|
int age;
|
|
};
|
|
|
|
int main() {
|
|
// 正确初始化指针
|
|
User* users = nullptr;
|
|
|
|
// 首次分配内存
|
|
users = new User[5];
|
|
|
|
// 在重新分配之前,确保已正确初始化或清空(如果需要的话)
|
|
// 注意:对于结构体中的对象成员,这可能并不必要,因为它们在新分配的内存中会被自动初始化为默认值
|
|
// memset(users, 0, 5 * sizeof(User)); // 如果确实需要清零整个结构体内容可以使用这个,但对于包含对象的数据类型不一定适用
|
|
|
|
// 使用realloc()函数重新分配内存块 - C++ 中应使用 new 进行动态内存管理
|
|
// 用户 struct 是内置类型的组合,在 C++ 中通常不会用 realloc,而是使用 new 进行重新分配
|
|
// 如果坚持使用 realloc 的话,这段代码应该在 C 程序中,并且需要先检查 users 是否为 nullptr
|
|
// users = (User*)realloc(users, 10 * sizeof(User));
|
|
|
|
// C++ 中使用 new 进行重新分配
|
|
User* tempUsers = new User[10];
|
|
if (users != nullptr) {
|
|
users = (User*)realloc(users, 10 * sizeof(User));
|
|
//std::memcpy(tempUsers, users, 5 * sizeof(User)); // 复制已有数据到新内存
|
|
delete[] users; // 释放旧内存
|
|
}
|
|
users = tempUsers;
|
|
|
|
// 继续使用重新分配后的内存块...
|
|
|
|
// 最后释放内存
|
|
delete[] users;
|
|
|
|
return 0;
|
|
} |