문제

안녕하세요 저는 2D 동적 배열에 문제가 있습니다.

int main()
{
   double **M;
   int M_dimension;
   int i;

   M_dimension = 10;

   M = new double *[M_dimension];
   for (i=0;i<M_dimension;i++)
   {
      M[i] = new double[M_dimension];
   }

   M[0][0] = 1.0;

...
}

프로그램은 작동하지만 이러한 함수를 사용하여 2D 배열을 초기화하고 싶습니다.

void initialize2D(double **M,int M_dimension)
{
   int i;
   M = new double *[M_dimension];
   for (i=0;i<M_dimension;i++)
   {
      M[i] = new double[M_dimension];
   }
}

마지막으로 프로그램은 다음과 같습니다.

int main()
{
   double **M;
   int M_dimension;
   int i;

   M_dimension = 10;

   initialize2D(M,M_dimension);        

   M[0][0] = 1.0; //crash

...
}

불행히도 그것은 충돌합니다 M[0][0] = 1.0;

도움이나 제안에 감사드립니다.

도움이 되었습니까?

해결책

당신은지나 가고 있습니다 M 참조 대신 가치에 따라. initialize2D 포인터 간 포인터의 값을 변경해야합니다 M 할당 된 메모리를 가리 킵니다

대신 기능 서명을 변경해보십시오.

void initialize2D(double **&M,int M_dimension)

또는

void initialize2D(double ***M,int M_dimension) {
    ...
    *M = new double *[M_dimension];
    ...
}

다른 팁

참조를 전달해야합니다 double** 대신에 double** 기능을 위해, 그렇지 않으면 m을 할당 한 후 포인터로 수행 된 수정. new 함수에서 빠져 나갈 때 길을 잃습니다.

문제는 int m_dimension void initialize2d (double ** m, int m_dimension)와 같은 정수 매개 변수를 선언하는 곳입니다.

그리고 동적 배열을 다음과 같이 초기화합니다. m [i] = new double [m_dimension];

가변 m_dimension을 정수로 선언 한 다음 더블로 사용했기 때문에 모순되는 곳

이 방법으로 시도해보십시오 : 데이터 유형의 배열 또는 m_dimension을 변경 한 다음 둘 다 동일한 데이터 유형을 갖습니다.

바라건대 이것은 당신을 도울 것입니다

왜 사용하지 않습니까? std::vector 또는 Boost.multiarray

2 차원 배열을 다음과 같이 정의하는 것은 매우 쉬운 운동입니다. C ++의 벡터의 일반 벡터

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top