我发现在嵌入代码负索引访问我调试:我可以保证使用负移位访问指针吗?
for (int i = len; i > 0; i--)
{
data[i - 1] = data[i - 2]; // negative access when i == 1
}
我读this关于类似的情况,但在OP arr[-2]
保证是因为arr
点的先前中间OK分配数组。就我而言,data
是一个类中的指针由构造与初始化:
public:
constructor_name(): ... data(new T_a[size]), ...
和指针data
在类中的第一个成员:
template <class T_a, class T_b, int size>
class T_c
{
private:
T_a *data;
T_b *...;
int ...;
int ...;
int ...;
public:
constructor_name(): ... data(new T_a[size]), ...
现在,有一个否定索引访问是故意的并且有意义的可能性?有没有一种方法编写程序员能够确保data[-1]
将访问特定数据,使用#pragma pack()
或其他任何方法?
看到*data
是班上第一个让我觉得这是一个bug的成员,但我不确定。如果确实是一个错误 - 是UB
?
确实是[未定义的行为](https:// en。wikipedia.org/wiki/Undefined_behavior)所以你没有任何保证 –
@BasileStarynkevitch如果'data'位于课堂上其他地方 - 它会有什么区别吗? – CIsForCookies
我不这么认为。关于UB的C++标准非常强大。 –