3

我正在尝试初始化一个大小为 ceil(buflen/125.0) 的数组,如下所示:

long long maxjpg = ceil(buflen/125.0);
long long arr[maxjpg];

我没有收到编译器错误,但 GDB 报告“当前上下文中没有符号 'arr'”。我发现的唯一解决方法是将数值硬编码到数组大小中,如下所示:

long long arr[5];

我尝试过强制转换、使用不同的变量类型、使用const这些方法以及这些方法的任意组合。我知道 ceil 返回 a double,我也尝试过使用它。

初始化一个值并像这样打印它是有效的:

arr[0] = 25;
printf(pos 0 is %d\n", arr[0]);

输出:pos 0 is 25

修改后通过 GDB打印arr[0]会导致“值已被优化”。

重现的最小可行代码:

#include <math.h>

int main(void){

long long size = ceil(123.45);    
long long arr[size];

return 0;
}

GDB Fedora 7.4.50.20120120-52.fc17

4

1 回答 1

3

VLA 目前在 gdb 中不起作用。有一个关于它的错误和一个正在进行的修复它的项目:https ://sourceware.org/gdb/wiki/VariableLengthArray

在某些情况下,archer.git 中有一个实现,但它被认为不足以进入主干。

于 2013-10-02T01:38:54.427 回答