2012-11-24 8 views
1

프로그램이 길 깁니다 (여기에는 정식 버전 : http://pastebin.com/cvg1eSJ1). (sample.txt는 다음과 같습니다. http://pastebin.com/hWihPpSj, INPUT 파일이며 다른 명령 줄 인수는 출력 파일입니다.)하지만 '두 번째 포인터 목록'을 다루는 파트를 게시하고 있습니다. 본질적으로 나는 47 개 정도의 항목 목록을 가지고 있으며, 특정 범위를 벗어난 항목을 두 번째 목록에 추가해야합니다. 이것이 제가 처음에 값을 저장하는 곳입니다. "tempAddress"를 사용하여 코드를 정리합니다. 나는 현재 주소에서 값을 가져 와서 확인하고, 일치하면 두 번째 읽기 목록에 추가합니다.포인터 메모리의 최종 값이 올바르지 않습니다.

for (i; i < numElements; i++) { 
     tempAddress = firstReadingList++; 
     if ((double) *tempAddress > plusOutlier || (double) *tempAddress < minusOutlier) { 
      *secondReadingList++ = *tempAddress; 

      numOutliers++; 
      printf("%d ", *tempAddress); 
     } 
    } 

나중에 다른 기능의 읽기 목록을 파일에 써야합니다. 값을 출력하고 마지막 값만 정확합니다. 나는 이유를 모른다.

752 843 840 848 752 850 753 (: 여기서 I는 파일에 기록하는 코드이다

for (i; i < numElements; i++) { 
    tempAddress = (outlierList + i); 
    printf("%d ", *tempAddress); 
    fprintf(out, "%d ", *tempAddress); 
} 

은 다음 제 함수의 출력은로 (tempAddress이 경우 새로운 변수이다) 이

내가 뭘 잘못 했나요이

752 843 840 848 752 850 577 (577이 잘못 올바른)

두 번째 코드 SNIPPIT 출력)인가? 나는 아직도 상대적으로 새로운 포인터이다. 함수 사이의 어느 지점에서나 secondListPointer를 수정하지 마십시오.

int *outlierList = malloc(sizeof *outlierList); 

int numOutliers = get_outliers(dataPointer, numReadings, outlierList, average, stdDev, STDDEV_SCALAR); 

을하지만 더 이상의 국외자가있을 수 있습니다 : 당신이 get_outliers 문의하기 전에

+0

* "프로그램이 길지만 관련 부분을 게시하려고합니다."* - 오류가 무엇인지 이해하지 못하면 어떤 부분이 관련이 있는지 어떻게 알 수 있습니까? – melpomene

+0

이것은 두 번째 포인터 목록이 전혀 참조되는 유일한 부분임을 의미합니다. 나머지 프로그램은 데이터가 올바른 첫 번째 목록 초기화 (평균, 표준 편차 등)를 처리합니다. –

+0

포인터 목록 *이 의미하는 바를 모릅니다. 그래서 당신을 도울 수 없습니다. 모든. 또한 * 두 번째 포인터 목록 *? 첫 번째 것은 무엇입니까? – melpomene

답변

1

, 당신은 int 메모리를 할당 할 수 있습니다. 그런 다음 예기치 않은 결과와 함께 정의되지 않은 동작을 호출하여 할당 된 메모리 외부에 씁니다. 여기서 일부 데이터가 손상되었습니다.

+0

그래서 외래 전화 번호 인 calloc을 사용해야합니까? 나는 그 시점 이전에 이상 치를 가지지 않을 것이다. –

+1

'malloc' 또는'calloc'은 그리 중요하지 않지만 모든 아웃 라이어에 대해 충분한 공간을 할당해야합니다. 안전한 옵션은'malloc (numReadings * sizeof * outlierList);'('numReadings'가 사실 요소의 총 개수 인 경우)이지만 적은 수를 할당 할 수 있습니다. 그리고 특이점의 수를 추적해야하며, 할당 된 공간이 채워지면 반응합니다. –

+0

와우는 그것을 완전히 고쳤습니다. 정말 고맙습니다. 내가 손상된 데이터가 무언가 엉망이 된 것처럼 보이거나 오류를 줄 것이라고 생각했기 때문에 그것이 손상되었음을 깨닫지 못했습니다. 그것을 완벽하게 고쳤습니다. –

관련 문제