gpt4 book ai didi

c++ - 可以在不取消引用的情况下增加指针仍然是段错误或具有其他(未)定义的肮脏吗?

转载 作者:可可西里 更新时间:2023-11-01 17:36:48 26 4
gpt4 key购买 nike

我在网上找到的所有关于递增指针导致段错误的示例都涉及指针的取消引用 - 如果我只想递增它(例如在 for 循环的末尾)并且我不在乎它是否最终进入无效内存,因为我不会再使用它。例如,在这个程序中,每次迭代我只需要步进 4,但在最后一次迭代后我再也不会取消引用这些指针。

float* leftRowPointer, resultRowPointer;
// assume they were correctly initialized

for (unsigned int i = 0; i < 4; ++i, leftRowPointer += 4, resultRowPointer += 4) {
// do some stuff
}

我需要做这样的事情吗?

for (unsigned int i = 0; i < 4; ++i) {
// same stuff
if (i != 3) {
leftRowPointer += 4;
resultRowPointer += 4;
}
}

有没有更好的方法来完成我想做的事情?

当我自己尝试时,似乎没有什么不好的事情发生,但这很难保证它总是有效,不幸的是我在工作中无法访问 Valgrind 或类似软件。

我们正在使用 C++11 标准,fwiw,我在那里找不到任何直接适用于此的东西,但我会第一个承认我对标准的了解不够清楚地知道在哪里寻找它。

最佳答案

第 5.7 节,“加法运算符”,第 5 段指定了这一点——加法本身的结果是未定义的;即使您从不取消引用指针,该程序也无效。

If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.

即使允许发生段错误,它也不太可能发生,但它仍然是未定义的。

关于c++ - 可以在不取消引用的情况下增加指针仍然是段错误或具有其他(未)定义的肮脏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34680393/

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