*** glibc检测到***和动态分配问题--C ++

时间:2014-10-16 11:33:40

标签: c++ glibc dynamic-arrays

我认为有两个问题是相关的。我试图创建一个动态的变量数组,然后访问该数组的不同特定成员。导致问题的代码段是:

        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)

从阅读中我知道这与错误分配数组或尝试访问不存在的数组值有关,但我无法看到问题出在哪里?

提前感谢您的任何帮助或建议!

1 个答案:

答案 0 :(得分:0)

i = 0;
F_inertia = new double[i];
F_drag = new double[i];
F_KN = new double[i];

当您在程序中稍后递增i时,这些行分配的内存量不会神奇地改变。

因此,您分配了三个零大小的数组,然后开始写入其不存在的元素 你在那里损坏了大量的记忆。

或者:

  • 在分配之前运行的单独循环中确定i的适当值,或
  • 使用可以自动为您增长的std::vector<double>