나는 관련된 것으로 생각되는 두 가지 문제점이 있습니다. 변수의 동적 배열을 만든 다음 배열의 다른 특정 멤버에 액세스하려고합니다. 문제의 원인이되는 코드 세그먼트이다 :*** glibc 감지 *** 및 동적 할당 문제 - C++
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;
정확하게 값을 출력하고, 모든 값이 올바르게 (이전 코드) 파일에 기록되고있다. 그러나 그 라인이 을 테스트로 사용하여 올바른 값을 보유하고 있는지 확인하기 위해 for 루프의 i = 1tst 위치와 동일한 값이 아닌 0을 출력합니다. 참고 : 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; '이 이상하게 느껴진다. http://stackoverflow.com/questions/1087042/c-new-int0-will-it-allocate-memory – fritzone
내가 초기화되지 않았을 수도 있다는 경고를 받았지만 그래도 괜찮 았어? 나는 단순히 배열의 어느 위치에서 F_KN, F_inertia 및 F_drag의 각 값을 추적하고 있는지를 사용하고 있습니다. – user3460758
배열을 동적으로 할당 할 필요가 없습니까? – user3460758