當前Visual C++隨運行時一起提供,其中malloc()
用__declspec(restrict)
裝飾。「指針未被任何其他指針混淆」的持續時間是多少?
MSDN說,這裝修狀態到通過malloc()
返回一個指針不能被任何其他指針的別名編譯器。好的,後續調用malloc()
確實返回不同的指針。但是如果我打電話,會發生什麼?
void* memory1 = malloc(10);
free(memory1);
void* memory2 = malloc(10);
//here memory1 may be equal to memory2
在這種情況下,兩個指針可以指向相同的位置。這與不能混淆的任何其他指針暗示__declspec(restrict)
?
我不明白這個問題。這裏沒有別名,free'd不再存在。在技術上解引用'memory1'就是UB。 – Mat
@Mat:看起來像一個答案。 – sharptooth