奇怪的编译错误:灾难性错误:数组表达式编译中的段长度不匹配,因为shocktube.c已中止

时间:2014-06-16 21:59:26

标签: 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编译器。 第一个语句不会工作,但第二个会工作,这真的很奇怪,因为AFAIK第一个语句中LHS数组的大小将为N(索引从1到1不等) N)和RHS的大小也应该是N(0到N-1),而在第二个语句中LHS的大小是N-1。

谢谢,

1 个答案:

答案 0 :(得分:2)

英特尔阵列部分表示法是 [start:length] ,而不是[start:end]。因此,这一行

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

无效,因为您正在索引数组的末尾(具体而言,您要求[1, N+2)数组中的索引fl,其最后一个维度只有N+1个元素)。

错误可能应该更温和一些(&#34;灾难性的&#34;不是我应用于用户错误的术语),但这最终不是编译器的错误。< / p>