gpt4 book ai didi

c++ - 为什么释放无效指针在 C++ 中未定义?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:07 26 4
gpt4 key购买 nike

考虑以下程序:

#include <iostream>
int main()
{
int b=3;
int* a=&b;
std::cout<<*a<<'\n';
delete a; // oops disaster at runtime undefined behavior
}

好的,根据 C++ 标准,程序的行为是未定义的。但我的问题是为什么它没有定义?为什么 C++ 的实现不给出任何编译器错误或任何警告?是否真的很难确定指针的有效性(意味着在编译时检查指针是否由 new 返回?)静态确定指针的有效性(即编译时)是否涉及任何开销?

最佳答案

不可能在编译时确定指针指向什么,这里有一个例子来说明这一点:

volatile bool newAlloc;

int main()
{
int b=3;
int* a;
if(newAlloc)
{
a = new int;
} else {
a = &b;
}
std::cout<<*a<<'\n';
delete a; // impossible to know what a will be
}

关于c++ - 为什么释放无效指针在 C++ 中未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254579/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com