提问人:Abhinav Jha 提问时间:12/6/2021 更新时间:12/6/2021 访问量:652
C++中的警告:指针包含一个值,在尝试分配新int32_t时必须检查该值
Warning in C++: Pointer holds a value that must be examined when trying to assign new int32_t
问:
我正在尝试学习 C++ 中的动态内存分配。 我的程序可以编译并工作,但 Visual Studio 向我抛出这些警告。
它们是什么意思?
Warning C28193 'ptr' holds a value that must be examined.
Warning C28182 Dereferencing NULL pointer. 'ptr' contains the same NULL value as
'new(1*4, nothrow)'
我的代码:
#include <iostream>
#include <cstdint>
int main()
{
int* ptr = nullptr;
if (!ptr) {
ptr = new (std::nothrow) int32_t;
*ptr = 10;
}
std::cout << *ptr << "\n";
}
答:
7赞
Ron Beyer
12/6/2021
#1
new (std::nothrow) int32_t
尝试为 分配内存,如果不能,则不会抛出异常,而是返回 。int32_t
nullptr
您可以继续为其分配一个数字 (10),但您需要首先通过在分配值之前检查是否为 nullptr 来确定内存分配是否成功。它试图告诉你,你需要一些错误检查。ptr
同样的事情,当你把它打印出来时,它可能是一个空,你需要检查它。
评论
0赞
Abhinav Jha
12/6/2021
所以我应该添加一个检查它是否是,如果不是,则只打印,对吧?if
NULL
1赞
bolov
12/6/2021
@AbhinavJha我只是想.如果内存分配失败,则除了关闭应用程序外,您无能为力。exit()
0赞
Ron Beyer
12/6/2021
@AbhinavJha 是的,类似或其他类型的恐慌。if (ptr == nullptr) exit();
0赞
Salvage
12/6/2021
在那种情况下,我一开始就不会使用?除非我错过了什么。std::nothrow
1赞
bolov
12/6/2021
@Salvage某些环境没有例外。
评论