C++:由以下原因引起的未定义行为
C++: Undefined behavior caused by...?
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
没有空间来存储任何东西。该写入会导致未定义的行为 - 它可能会崩溃,可能会覆盖内存,或者可能会导致您的计算机添加...一。。。百。。。十亿。。。美元到您的银行账户。
int sorted[] = {}
这将创建一个包含 0 个元素的数组。
在
更...限制模式比它默认运行,只是为了禁用最轻率的编译器扩展。这几乎适用于所有编译器。
在您的情况下
int sorted[] = {};
是完全格式不正确的C++代码,这是触发诊断消息所必需的。该诊断消息是有充分理由专门作为错误消息的,而不仅仅是警告。
严格来说,即使有很多奇怪的扩展编译器实现,我仍然感到惊讶,有一个允许这个声明溜走。那是什么编译器?
我自己试过了,发现GCC实际上接受了这一点。这次他们在想什么?这是干什么用的?支持具有零大小尾随数组的"struct hack"对象的本地声明?别的?
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 对 Scalar ::Scalar() 的未定义引用