Я пишу простой ANN (нейронная сеть) для приближения функций. Я получил сообщение с сообщением: «Куча повреждена». Я нашел несколько советов, как их решить, но ничего не помогает. я получил ошибку в первой строке этой функции:C++ куча коррупции на новом
void LU(double** A, double** &L, double** &U, int s){
U = new double*[s];
L = new double*[s];
for (int i = 0; i < s; i++){
U[i] = new double[s];
L[i] = new double[s];
for (int j = 0; j < s; j++)
U[i][j] = A[i][j];
}
for (int i = 0, j = 0; i < s; i = ++j){
L[i][j] = 1;
for (int k = i + 1; k < s - 1; k++){
L[k][j] = U[k][j]/U[i][j];
double* vec_t = mul(U[i], L[k][j], s);
for (int z = 0; z < s; z++)
U[k][z] = U[k][z] - vec_t[z];
delete[] vec_t;
}
}
};
Как я понял из информации debagger в: два массива (U и L) был принят для работы с некоторыми адресами в памяти. И это довольно странно, потому что я не инициализировал его. Я вызываю эту функцию два раза, и в первый раз она работает хорошо (нормально, по крайней мере, она работает), но при втором вызове она сработает. Я не знаю, как его решить.
Ссылка на весь проект: CLICK
Я работаю в MS Visual Studio 2013 под Windows 7 x64.
UPDATE
Согласно некоторым комментариям ниже я должен предоставить некоторую аддитивную информацию.
Прежде всего, извините за качество кода. Я написал это только для себя в течение 2 дней.
Во-вторых, когда я сказал «при втором вызове», я имею в виду, что сначала я вызываю LU, когда мне нужно получить определитель S (я использую LU-декомпозицию для этого), и он работает без каких-либо сбоев. Второй вызов - это когда я пытаюсь получить обратную матрицу (то же самое, S). И когда я вызываю detLU в [0, 0] точке матрицы (чтобы получить кофактор), я получил этот крах.
В-третьих, если я правильно получаю информацию от debagger, массивы L и U передают функцию при втором вызове с уже определенными адресами памяти. Я не могу понять, почему, потому что перед вызовом LU я только что написал «double ** L; double ** U;» без какой-либо инициализации.
Я могу попробовать предоставить дополнительную информацию об отладке или некоторые тесты, если кто-нибудь объяснит мне, что именно я должен делать.
Просьба создать [SSCCE] (http://www.sscce.org). –
«но при втором вызове это сбой» может означать много чего. Пожалуйста, будьте конкретны. – thang
Куча могла быть повреждена в любое время, даже вне этой функции или до ее вызова. – molbdnilo