c++ - 奇怪的编译错误: catastrophic error: section length mismatch in array expression compilation aborted for shocktube. c

标签 c++ arrays icc

我在编译一段简单的代码时遇到了麻烦。详情如下:

变量声明:

double q_old[3][N], q_new[3][N], u[3][N], flux[3][N+1], fl[3][N+1], fr[3][N+1];

以下行似乎是错误的来源:

fl[0][1:N+1] = u[1][0:N]*u[0][0:N]; // this does not work
fl[0][1:N] = u[1][0:N]*u[0][0:N]; // this works

错误:

shocktube.c(47): catastrophic error: section length mismatch in array expression
compilation aborted for shocktube.c (code 1)

我正在使用intel icpc编译器。 第一个语句不起作用,但第二个语句起作用,这真的很奇怪,因为据我所知,第一个语句中 LHS 数组的大小将为 N(索引从 1 到N),RHS的大小也应该是N(0到N-1),而在第二个语句中LHS的大小是N-1。

谢谢

最佳答案

英特尔阵列部分符号为[start:length],而不是[start:end]。因此,这一行

fl[0][1:N+1] = u[1][0:N]*u[0][0:N]; // this does not work

无效,因为您的索引超出了数组末尾(具体来说,您要求在 fl 数组中提供索引 [1, N+2),其索引最后一个维度只有 N+1 元素)。

错误可能应该稍微温和一些(“灾难性”不是我适用于用户错误的术语),但这最终不是编译器的错误。

关于c++ - 奇怪的编译错误: catastrophic error: section length mismatch in array expression compilation aborted for shocktube. c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24252909/

相关文章:

用于在指向相同大小的类型的指针之间进行转换的 C++ 转换?

python - 展开数组并附加行名称

c++ - 从导入的二维数组计算平均值

英特尔 icc 编译器 -O 标志和 -qopt-report

C++压缩两个for循环提高效率

c++ - 如何从命令行 C++ VSPackage 获取 DTE 对象

c - PGO 比静态优化慢(intel 编译器)

c++ - 如何使用 gcc 和 intel 静态库进行编译?

c++ - 从 com 对象返回数组

java - 在Java中读取制表符分隔的文件,一次读取一个 "line"