2013-01-20 5 views
-2

내 프로그램은 런타임에 2 차원 배열에 메모리를 할당 한 다음 요소를 가져 와서 표시합니다. 내 prog 누군가가 그것을 식별하는 데 도움이 될 수있는 몇 가지 예외를 던지고 있습니까? 알록 올바르게 문제를 추측으로프로그램에 unknow 예외가 발생했습니다.

#include<stdio.h> 
#include<malloc.h> 
#include<stdlib.h> 

int main() 
{ 


int i,j,row, col; 
    int *ptr; 
    printf("enter size of row and col\n"); 
    scanf("%d%d",&row,&col); 
    ptr = (int *)malloc(row*col*sizeof(int)); 
    if(ptr==NULL) 
    { 
     printf("stderr, not able to allocate memory"); 
     exit(1); 
    } 
    else 
    { 
     printf("enter the element"); 
     for(i=0; i<row;i++) 
      for(j=0;j<col;j++) 
      { 
       scanf("%d",ptr[i+j]); 

      } 
     for(i=0; i<row;i++) 
     { 
      for(j=0;j<col;j++) 
       printf("%d ",ptr[i+j]); 
      printf("\n"); 
     } 

    } 
} 
+1

'scanf ("% d", ptr [i + j]);'이 작업은 무엇입니까? –

+1

실제 오류를 게시하십시오. – JasonD

+2

디버거에서 실행하고 실패한 곳을 확인하십시오. – NPE

답변

1

는 변수의 주소가 아닌 변수 자체를 전달해야 scanf를 들어 scanf

scanf("%d",ptr[i+j]); 

당신의 호출에 있습니다. 아래 중 하나를 수행하여 코드를 수정할 수 있습니다.

scanf("%d",&ptr[i+j]); 

scanf("%d",(ptr+i+j)); 

p.s. minor nit, 컴파일러의 눈에는 1D 배열을 할당하고 있습니다. 단지 2 차원 배열 인 것처럼 액세스하는 것만 가능합니다.

p.p.s PaulR이 지적한 것처럼 2D 배열을 올바르게 시뮬레이션하려면 & ptr [i * col + j]를 사용해야합니다.

1

scanf()은 수정해야하기 때문에 인수에 대한 포인터를 사용합니다. 따라서

scanf("%d", ptr[i + j]); 

대신

scanf("%d", &ptr[i + j]); 

또는

scanf("%d", ptr + i + j); 

이어야한다.

(당신이 정말로 2 차원 배열을 모방하려는 경우, 당신은 어쨌든

&ptr[i * columns + j] 

를 사용해야합니다 - 감사합니다 그 지적에 대한 PaulR 수 있습니다.)

+1

''ptr [i * col + j]'일 가능성이 더 큽니까? –

+0

얘들 아 2 차원 배열을 가로 지르는 데 하나의 차원 방법을 사용하고 있다는 것을 알고 있습니다. 내 생각은 왜 포인터가 1 차원 배열에 대한 포인터로 할 수있는 경우 to2-d 배열이 필요합니다. 또한 귀하의 회신에 감사드립니다. – Hemant

1

귀하의 액세스를 아마로 이차원 배열로 의도 된 2 차원 배열 ptr은 매우 의심 스럽습니다. 매번 ptr[row * i + j]과 같은 형식이어야합니다 (다른 답변에서 언급 된 scanf으로 엉망으로 고친 후에).

+0

나를 고쳐 주셔서 감사합니다 .... 미안 해요,이 일에 처음이에요. 대단히 감사합니다 – Hemant

관련 문제