我认为有两个问题是相关的。我试图创建一个动态的变量数组,然后访问该数组的不同特定成员。导致问题的代码段是:
double *F_inertia, *F_drag, *F_KN;
i = 0;
F_inertia = new double[i];
F_drag = new double[i];
F_KN = new double[i];
t = 0;
x = 0;
for (z = 0; z >= -d; z = z-8) {
F_drag[i] = ((0.5 * rho * Cd * Diam * ux * fabs(ux)));
F_inertia[i] = (rho * Cm * Vol * ax);
F_KN[i] = (F_drag[i] + F_inertia[i])/1000;
cout << i << "\t" << F_KN[i]<< endl;
i++;
}
cout << F_KN[1] << endl;
delete[] F_inertia;
delete[] F_drag;
delete[] F_KN;
行cout << i << "\t" << F_KN[i]<< endl;
正在正确输出值,并且所有值都正确写入文件(代码中较早)。但是,当我使用行cout << F_KN[9] << endl;
作为测试来查看该位置是否保持正确的值时,它会输出一个0,这与for循环中的i = 1tst位置不同。 注意:F_KN[5]-F_KN[8]
的值正确打印!只是没有任何较低的职位!我非常困惑!!
其次,在代码编译并运行之后,在给出正确的值(第一个问题除外)之后,这就出现了:
*** glibc detected *** ./monopile_deflection: free(): invalid next size (fast): 0x0000000001365260 ***
monopile_deflection: malloc.c:2451: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted (core dumped)
从阅读中我知道这与错误分配数组或尝试访问不存在的数组值有关,但我无法看到问题出在哪里?
提前感谢您的任何帮助或建议!
答案 0 :(得分:0)
i = 0;
F_inertia = new double[i];
F_drag = new double[i];
F_KN = new double[i];
当您在程序中稍后递增i
时,这些行分配的内存量不会神奇地改变。
因此,您分配了三个零大小的数组,然后开始写入其不存在的元素 你在那里损坏了大量的记忆。
或者:
i
的适当值,或std::vector<double>
。