gpt4 book ai didi

c++ - 为什么此代码在 x64 发布和调试中运行不同?

转载 作者:行者123 更新时间:2023-12-04 13:08:02 24 4
gpt4 key购买 nike

#include <iostream>

int binary_search(int (&arr)[6], const int &target) {
int low = 0;
int high = sizeof(arr) - 1;

while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] > target) {
high = mid - 1;
} else if (arr[mid] < target) {
low = mid + 1;
}
}
return -1;
}

int main() {
int arr[] = {1, 3, 5, 7, 9, 11};

std::cout << binary_search(arr, 1) << std::endl;

return 0;

enter image description here

我怎样才能让它正常工作

AMD 中央处理器 R5 2600

vs2019 + LLVM 12.0.1

enter image description here

运行结果:

-1

F:\OpenGL\Source\x64\Debug\DGL.exe (进程11860)已经退出,代码为0。要在调试停止时自动关闭控制台,请启动“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。按任键关闭此窗口。 . .

正常结果应该是0

最佳答案

数组中元素的数量是数组的大小除以其中一个元素的大小。因此,在您的代码中,要获取最后一个值的索引,您需要包含除法 sizeof(int),如下所示:

    int high = (sizeof(arr)/sizeof(int)) - 1;

就目前而言,您的代码试图访问“越界”数组元素,因此表现出未定义的行为 (UB)。这样的 UB 是不可预测的,并且会经常在不同的构建(即发布和调试)之间以不同的方式表现出来。

此外,当您将固定大小数组作为第一个参数传递时,您可以只使用该(已知)大小,而不用计算它:

    int high = 5;

尝试向 main 中的数组初始值设定项添加一个额外的元素,如下所示:

    int arr[] = { 1, 3, 5, 7, 9, 11, 13 };

您将(或应该)收到一条错误消息,如下所示(由 clang-cl 生成):

error : no matching function for call to 'binary_search'
message : candidate function not viable: no known conversion from 'int [7]' to 'int (&)[6]' for 1st argument

关于c++ - 为什么此代码在 x64 发布和调试中运行不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68499552/

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