gpt4 book ai didi

C++:由...引起的未定义行为?

转载 作者:行者123 更新时间:2023-11-30 00:36:05 24 4
gpt4 key购买 nike

int size = 0;
int sorted[] = {};
int symbols[] = {8, 9, 13, 16, 16, 16, 17, 17, 17, 18, 18, 18, 20, 20, 27,
32, 33, 34, 35, 36, 37, 38, 39, 40, 44, 45, 46, 48, 48, 48, 49, 49, 49, 49,
50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55,
55, 56, 56, 56, 57, 57, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 112, 113,
114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 160, 161, 161, 162, 162,
163, 164, 164, 165, 186, 186, 186, 187, 187, 187, 188, 188, 188, 188, 189,
189, 189, 190};

int i = 0;
while(symbols[i] != 190){
size++;
if(symbols[i+1] == 190) {
size++;
}
i++;

}

int indx = 0;
for(int i = 0; i < size-1; i++) {
if(symbols[i] != symbols[i+1]) {
sorted[indx] = symbols[i];
indx++;
}
}

我找不到问题所在。什么会导致未定义的行为? for 循环后的大小变量变为 27(应该是 123),我没有更改。完全迷路了,无法弄清楚问题出在哪里。

最佳答案

int sorted[] = {}

好的...这样排序的是一个没有元素的数组。一些编译器会对此发出警告:

test.cpp(217) : error C2466: cannot allocate an array of constant size 0

但让我们假设它适用于您的编译器并创建一个大小为 0 的常量数组……然后呢?您的代码执行此操作:

sorted[indx] = symbols[i];

嘿!这是怎么回事... sorted 没有空间来存储任何东西。写入会导致未定义的行为 - 它可能会崩溃,可能会覆盖内存,或者可能会导致您的计算机向您的银行帐户添加...一...千...十亿...美元 .

关于C++:由...引起的未定义行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17004164/

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