실행 파일 (C로 작성)이 문제없이 실행할 수있는 메모리 제한이 있습니까?

StackOverflow https://stackoverflow.com/questions/643710

  •  22-07-2019
  •  | 
  •  

문제

C를 사용하여 프로젝트를 수행하고 있으며 CodeBlocks는 내 IDE입니다. Windows Vista는 OS입니다. 나는 이미 작동하는 코드에 새로운 것들을 추가했으며 이제는 실행 파일이 매번 충돌합니다. 그래도 컴파일 한 후에는 오류가 없습니다. 컴퓨터와 프로그래밍은 내 분야가 아니지만, 어떤 종류의 메모리 제한과 관련이있을 수 있다고 생각합니다 (존재하고 심지어 의미가있는 경우). 나는 세 가지 다른 3D 행렬/차원 배열로 작업하고 있기 때문에 이것을 말합니다.

  • 1500x5x2
  • 1500x5x12
  • 1500x5x200

그런 다음 차원 1500의 또 다른 두 개의 1D 배열이있었습니다. 이것은 모두 잘 작동했습니다.

또 다른 3 개의 2D 매트릭스/배열을 모두 추가하여 1500x5 차원을 추가하면 충돌이 시작되었습니다. 기존 매트릭스 중 일부에 댓글을 달면 새로운 매트릭스는 잘 작동하지만 한 번에 하나만 작동합니다.

(BTW, 위의 모든 언급 된 행렬은 int 유형이며 포인터 및 콜록으로 정의되었습니다)

제안이 있습니까?

도움이 되었습니까?

해결책

플랫폼 등에 제한이 있지만 3 개의 3D 매트릭스는 몇 MB의 RAM (6 개 이상) 만 사용하므로 주어진 한계에 부딪 치는 것을 의심합니다.

다른 행렬을 추가했을 때 방금 충돌하기 시작한 경우 추가 된 새 행렬 코드를 정의하는 포인터에 메모리 할당/액세스 오류가 있다는 것이 더 의심 스러울 것입니다.

매트릭스를 어떻게 정의하고 있습니까?

---- 편집하다 ----

당신은 시도해야합니다 CodeBlocks의 디버그. 이것은 당신의 충돌이 어디에서 발생하는지 정확히 알려야합니다.

다른 팁

어레이가 부정적인 치수를 가질 수 있다는 것을 알지 못했습니다.

사실, 나는 배열 차원이 당신이 그것을 넣는 항목의 수이기 때문에 나는 그들이 할 수 없다고 확신합니다.

IDE의 디버거를 사용하는 방법을 배우는 것이 좋습니다. 우리는 아직 계속할 것이 없습니다.

실행 파일 (C로 작성)이 문제없이 실행할 수있는 메모리 제한이 있습니까?

32 비트 OS에서 귀하의 프로그램은 4GB의 메모리로 제한됩니다 (실제로는 적은 상한이지만 하드 상한). 포인터 크기는 32 비트이기 때문에 32 비트 포인터로 4GB 만 참조 할 수 있습니다.

그러나 가장 큰 배열은 6MB 미만 만 소비하기 때문에 문제가되지 않아야합니다.이 배열의 수백 개를 인스턴스화하더라도 괜찮습니다.

당신은 거의 다음과 같습니다 c:

int *** layer=calloc(lines, sizeof(int **));
for(i=0;i<lines;i++)
{ 
   layer[i]=calloc(columns, sizeof(int*));
   for(j=0;j<columns;j++) 
   { 
     layer[i][j]=calloc(hight, sizeof(int));
   }
}

그래서 나는 당신의 코드의 다른 곳을 봅니다. 디버거를 사용하십시오. 배열 액세스가 한계를 벗어나지 않도록하거나 배열 요소를 포인터로 처리하지 않도록하십시오.

-아담

어떤 종류의 충돌을 지정할 수 있습니까?

어떤 메시지를 받고 있습니까?

위의 답변을 인용합니다.

"IDE의 디버거를 사용하는 방법을 배우는 것이 좋습니다. 우리는 아직 계속할 것이 없습니다."

가능한 원인을 추측하는 대신 문제를 특정 코드 라인으로 좁히기 위해 사용 가능한 도구를 사용하십시오.

나는 당신의 의견에서 당신이 당신의 문제를 해결했다고 생각했지만 일반적으로 제대로 디버깅하는 유일한 방법은 프로그램을 게시 할 때 문제를 게시 할 때 가능한 많은 코드와 세부 사항을 제공합니다!

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