修改原始数据为const后指针指向的位置是UB吗?

问题描述 投票:0回答:1

即使指针的数据为const,也会改变指针指向的位置的不确定行为?例如:

const char* p = "foo";
p = "boo";

我相信这不是UB,因为指针本身不是const,并且我没有修改"foo"对象。

额外问题:并更改const指针的数据?会UB吗?例如:

char* const p = "foo";
(*(char**)&p) = (char*)malloc(strlen(p));
c++ pointers const undefined-behavior
1个回答
2
投票

我相信这不是UB,因为指针本身不是const,并且我没有修改“ foo”对象。

这是正确的。指针不是const,因此您可以根据需要将其更改为指向其他对象。在这种情况下,它不会造成内存泄漏,但是请记住,如果指针指向用new分配的数据,并且它是指向该数据的唯一指针,则需要在重新分配指针之前调用delete,否则您将内存泄漏。

额外的问题:并删除指针的常数?会是UB吗?

[如果尝试修改从中删除了constconst对象,则只有UB,在这种情况下,您要这样做。只需删除const是可以的,有时是需要的,但是除非该对象不是const的开始,否则永远不允许您修改该对象。即,当传递的对象不是const时,将通过const引用传递给函数的对象上的const抛弃。


1
投票

第一个代码段中的代码是100%正确的。您有一个指向const p的指针,该指针指向其他内容。一切都很好,处于薄荷状态。

© www.soinside.com 2019 - 2024. All rights reserved.