指向对象生存期之外的已分配内存的指针是"invalid pointer[s]"还是"pointer[s] to an object"?
Are pointers to allocated memory outside object's lifetime "invalid pointer[s]" or "pointer[s] to an object"?
C++17(草案N4659([碱性化合物]/3说:
指针类型的每个值都是以下值之一:
指向对象或函数的指针(据说指针指向对象或功能(,或
经过对象末尾的指针([expr.add](或
该类型或的空指针值([conv.ptr](
无效的指针值。
这些类别中的哪一个属于指向对象生存期之外已分配内存的指针,特别是以下程序中// (1)
到// (3)
的a
和// (4)
的b
的值?
#include<new>
#include<algorithm>
struct S {
~S() { /* Non-trivial destructor */ }
};
struct T {
~T() { /* Non-trivial destructor */ }
};
int main() {
void* a = operator new(std::max(sizeof(S), sizeof(T)));
// (1)
a = new(a) S;
static_cast<S*>(a)->~S();
// (2)
a = new(a) T;
static_cast<T*>(a)->~T();
// (3)
operator delete(a);
void* b = operator new(42);
// (4)
operator delete(b);
}
在我的理解中,指针值在解除分配时变得无效,而不是在对象的生命周期结束时,但如果指针值是"指向对象的pointer[s]",它们指向哪个对象?
这些类别中的哪一个属于对象生存期之外已分配内存的指针,特别是以下程序中
// (1)
到// (3)
的a
和// (4)
的b
的值?
分配函数返回的指针值(// (1)
的a
和// (4)
的b
(当前未指定,几乎不可能根据[basic.component]/3中的分类法对其进行分类,请参阅https://groups.google.com/a/isocpp.org/d/msg/std-discussion/4NQawIytVzM/eMKo2AJ9BwAJ
在我的理解中,指针值在解除分配时变得无效,而不是在对象的生命周期结束时,但如果指针值是"指向对象的指针",它们指向哪个对象?
指向对象处于活动状态时所指向的对象。
当涉及到基本的运行时概念时,所有C++标准都是一个糟糕的烂摊子。
什么是左值?它需要能够引用尚未创建的对象。(指针也是如此。(
未创建的对象何时存在?它们会在需要之前出现吗?
对我来说,最好的方法是假设所有对象类型都存在于内存中适合它们的位置这里的许多人告诉我,这是疯狂和矛盾的,但从来没有人指出矛盾。
- C++ - "!pointer"和"pointer == nullptr"的区别?
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- C++ "error: invalid use of void expression"
- 收到错误"invalid use of non-static data member 'stu::n' "
- Poloniex API "Invalid command" c++ libcurl
- C++模板错误:"invalid explicitly-specified argument for template parameter"
- "No-Const Pointer to Const "调用功能
- 马洛克会在 C++17 年返回"invalid pointer value"吗?
- 指向对象生存期之外的已分配内存的指针是"invalid pointer[s]"还是"pointer[s] to an object"?
- 如何捕捉"free(): invalid pointer:"
- 如何修复合并两个C++数组时'Invalid Pointer'
- " free(): invalid pointer:" 8谜题BFS
- 在析构函数中检测到"Trying to free invalid pointer"错误
- 一段C++代码出现错误"invalid pointer"
- 文本输出() - "invalid null pointer"
- 将shared_ptr(this)推入矢量会导致"free(): invalid pointer"错误
- 为什么我会收到"./exe: free(): Invalid Pointer"错误?
- "Invalid pointer dequeued from free list",断点malloc_error_break无济于事
- "glibc detected - free(): invalid pointer - Program received signal SIGABRT, Aborted"