-2
이 질문은 완전히 다시 작성되었습니다. 다시 한 번 전체 텍스트를 검토해보십시오.충돌을 std :: array 전달에 연결했습니다.
표준 배열을 사용하는 프로그램에 문제가 있습니다. 아래 코드는 전체 프로그램을 가능한 한 제거하고 여전히 오류를 재현하는 것입니다.
어디에 문제가 있는지 알 수 없습니다. 읽을 수 있듯이, 주석 1, 2 (동시에)와 3은 모든 코드 신호 조각을 제거하면 프로그램이 충돌하지 않고 실행됩니다.
또한 costant N을 3으로 설정하거나 배열의 다른 값 조합을 사용하면 프로그램이 완료 될 때까지 실행됩니다. 0으로 나누면 모든 오류 지점을 설명 할 수 없습니다 (주석 # 3 참조).
#include <iostream>
#include <array>
#include <math.h>
#define N 4
void f1(std::array<std::array<float, N>, N> a, std::array<float, N> b, std::array<float, N>& c);
void f2a(std::array<std::array<float, N>, N>& a, std::array<float, N>& b, std::array<float, N>& d);
void f2b(std::array<std::array<float, N>, N>& a, std::array<float, N>& b, std::array<float, N>& d, int i);
void f3(std::array<std::array<float, N>, N> a, std::array<float, N> b, std::array<float, N>& c);
int main()
{
std::array<std::array<float, N>, N> a = { { { 1, 1, 0, 3 },{ 2, 1, -1, 1 },{ 3, -1, -1, 2 },{ -1, 2, 3, -1 } } };
std::array<float, N> b = { 4, 1, -3, 4 };
std::array<float, N> c;
f1(a, b, c);
std::cin.get();
return 0;
}
void f1(std::array<std::array<float, N>, N> a, std::array<float, N> b, std::array<float, N>& c)
{
std::array<float, N> d;
for (int i = 0; i < N; i++)
{
d[i] = fabs(a[i][0]);
for (int j = 1; j < N; j++)
{
if (fabs(a[i][j] > d[i]))
{
d[i] = fabs(a[i][j]);
}
}
}
//switching b and d
f2a(a, b, d);
f3(a, b, c);
}
void f2a(std::array<std::array<float, N>, N>& a, std::array<float, N>& b, std::array<float, N>& d)
{
for (int i = 0; i < (N - 1); i++)
{
f2b(a, b, d, i);
}
}
void f2b(std::array<std::array<float, N>, N>& a, std::array<float, N>& b, std::array<float, N>& d, int i)
{
float float1, float2;
int p = i;
float1 = fabs(a[i][i]/d[i]);
for (int ii = (i + 1); ii < N; ii++)
{
float2 = fabs(a[ii][i]/d[ii]);
if (float2 > float1)
{
float1 = float2;
//11
p = ii;
}
}
if (p != i)
{
//2
THE MISTAKE IS HERE, WHERE i IS WRITTEN FOR ii
for (int ii = i; i < N; i++)
{
float2 = a[p][ii];
a[p][ii] = a[i][ii];
a[i][ii] = float2;
}
//2
float2 = b[p];
b[p] = b[i];
b[i] = dummy;
}
}
void f3(std::array<std::array<float, N>, N> a, std::array<float, N> b, std::array<float, N>& c)
{
//3
c[0] = 0;
}
코드가 컴파일되지 않아 충돌을 일으키지 않습니다. [mcve]를 게시하십시오. – juanchopanza
제발, 다시 시도하십시오 – maja
이제 코드가 충돌을 일으키지 않을 것입니다. 정말 너의 [mcve]인가? – juanchopanza