【发布时间】:2014-10-16 11:33:40
【问题描述】:
我有两个我认为相关的问题。我正在尝试创建一个动态变量数组,然后访问该数组的不同特定成员。导致问题的代码段是:
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)
从阅读中我知道这与错误地分配数组或尝试访问不存在的数组值有关,但我看不出问题出在哪里?
提前感谢您的任何帮助或建议!
【问题讨论】:
-
F_inertia = new double[i];和i = 0;感觉很奇怪。见stackoverflow.com/questions/1087042/… -
好的,尽管我收到了警告说我可能未初始化,但没有这个?我使用 i 只是为了跟踪 F_KN、F_inertia 和 F_drag 的每个值在数组中的哪个位置。
-
那我不需要动态分配数组了吗?
-
@user3460758:fritzone 并没有建议您完全转储初始化;他建议修复它!
标签: c++ glibc dynamic-arrays