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.
 
 
 
sonar-keyware/uut-example/cxx/src/ReallocMainChecker.cc

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;
}