2014-10-17 2 views
0

무엇이 잘못 되었나요? 왜 작동하지 않습니까? 그것의 세분화 결함을 보여주는 (코어 덤프) 우리는 a[I]을 사용합니까?Malloc을 사용하여 생성 한 배열 액세스

#include<stdio.h> 

int main() 
{ 
    int *a,i,n; 

    scanf("%d",&n); 

    *a=malloc(n*sizeof(int)); 

    for(i=0;i<n;i++) 
    a[i]=i; 

    free(a); 

    return(0); 
} 
+1

는 = malloc을해야한다는 * – sp2danny

+0

1. 들여 쓰기의 비트를 수행 드롭 :

당신은 말하고 싶다. 2. 컴파일러 경고를 켜십시오. -'* a = malloc (n * sizeof (int));'줄이 올바르지 않습니다. 3.'scanf' 함수의 반환 값을 확인하십시오. –

답변

0

당신이 설정하고있는 메모리 주소는 malloc에 ​​의해 반환 된 주소로 a에 의해 지적했다. a이 아직 초기화되지 않았으므로 메모리의 정의되지 않은 부분을 malloc이 반환 한 주소로 설정합니다.

*a=malloc(n*sizeof(int)); 

대신 자체

a=malloc(n*sizeof(int)); 
1

*a = malloc(n * sizeof(int));a = malloc (n * sizeof(int));

malloc() 스토리지를 할당하고 첫 번째 바이트에 대한 포인터를 리턴되어야 포인터를 설정.

a은 포인터 변수가 주소를 가리켜 야합니다.

이 경우 *a은 포인터와 함께 *이 참조 해제에 사용되므로이 경우 올바르지 않습니다.

+0

당신의 답이 맞습니다, 왜 OP에 설명 할 수 있습니까? – ryyker

+0

@ryyker : 정보를 추가했습니다. :) – user1336087

+0

내가이 코멘트를 작성했을 당시에 내가 당신을 투표했습니다. 좋은 대답 – ryyker

2

컴파일러 경고를 사용하도록 설정하십시오. 뭔가에 대해 비명해야합니다

*a=malloc(n*sizeof(int)); 

이 말한다 :

  1. 일부 메모리를 할당합니다.
  2. 해당 주소를 a이 가리키는 정수에 할당합니다.이 주소는 초기화되지 않고 알려진 위치가 없음을 나타냅니다.

a 그 자체는 여전히 아무데도 가리키고 있지 않습니다. 그런 다음

:

a[i]=i; 

은 임의의 공간에 기록합니다.

a = malloc(n * sizeof(int)); 
관련 문제