2017-10-28 2 views
1
int* dividers_of(int x, int ammount){ 
int i,j = 1; 
int* dividers = (int*)calloc(ammount,sizeof(int)); /* calloc initializes int array to 0!*/ 

for(i=0;i<ammount;i++){ 

    while((x%j) != 0){ 
     j++; 
    } 

*(dividers+i) = j; 

/*DOESNT WORK (int* dividers stays on 0-0-0) 
*dividers = j; 
dividers++; */ 

j++; 
} 
return dividers; 
} 

나는, 나는 그것의 배열에 int j 다음 int를 가리킨 dividers*dividers에 다음 만들기를 할당하고있어 작동하지 않는 코드를 잘못 무엇인지 찾기 위해 노력하고있어. 결과는 int xint 디바이더가 포함 된 배열에 대한 포인터 여야합니다. calloc 이런 배열을 채우기 때문에 아무 의미포인터 점진

dividers[] = {0,0,0}; 

변경된 :

불행히도이 같은 그렇게하면 그 결과는 다음의 배열이다.

*dividers = j; 
dividers++; 

에서

일이 뭐죠?

dividers++; 

다음은 마지막에 원래 값이 없습니다 : 당신은 루프에서 dividers을 증가하는 경우

+0

을 '금액'이 아니라 '금액'. – melpomene

+0

[calloc의 결과를 캐스팅하지 마십시오] (https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc). – melpomene

+0

1/** 문제를 재현 할 수 없습니다. ** 이것은 신규 사용자에게 공통적 인 문제이므로이 웹 사이트의 도움말 센터에있는 FAQ를 참조하여 다른 사람들이 문제를 재현 (따라서 실험)하십시오. 섹션에 직접 연결되었습니다. 예의에 관해 이야기 할 예정이라면 여기에 게시하기 전에 전체 섹션을 읽어야합니다. 이와 같은 커뮤니티 표준을 무시하는 것은 무례합니다. – Sebivor

답변

0

은 증가와

return dividers; 

을, 함수는 과거에 대한 포인터를 반환 배열의 시작 부분에 대한 포인터가 아니라 배열의 끝.

이 문제를 해결하는 가장 쉬운 방법은 시작에 또 다른 변수에 원래의 포인터를 저장하는 것입니다 :

int *dividers = ...; 
int *dividers_start = dividers; 

/* ... modify dividers here ... */ 

return dividers_start; 

그러나 당신은 또한 증가 취소 포인터 연산을 사용할 수 있습니다 : 그것은 철자

return dividers - ammount; 
+0

배열의 값은 어떻게됩니까? – Aditya

+0

@ADITYA 배열은 무엇입니까? – melpomene