2013-08-20 3 views
0

프로젝트 실행을 시작할 때 분할 오류가 발생했습니다.포인터 내부의 배열에 액세스하려고 할 때 세그먼트 오류가 발생했습니다.

I는 I가 할당 될 때 어레이 "X [4]"이제 다음

myfirstclass * firstptr; 
firstptr -> x[4]; 

를 이용하여 2 개 개의 다른 클래스

내가 액세스 번째 클래스

Class myfirstclass { 
int x[4]; 
}; 

를 선언 "firstptr -> x [4];"배열에 일부 계산을 수행하려면 세그먼트 오류가 있습니까?

int y[4]; 
for (int i=0; i<4;i++){ 
    y[i]= firstptr -> x[i]; -> "This statement what caused the segmentation fault." 
} 

이 오류를 수정하도록 도와 줄 수 있습니까?

+1

실제로 'firstptr'에 메모리를 할당 했습니까? – arne

+1

은 *를 제거하고 인덱스는 0부터 시작합니다. 즉, myfirstclass firstptr; firstptr.x [3]은 마지막 요소입니다. –

답변

0

클래스를 할당해야합니다. for 루프 전에

는 수행

firstptr = new myfirstclass; 
1

당신은 당신이 firstptr를 초기화하지 않은이

myfirstclass * firstptr; 
firstptr -> x[4]; 

을합니다. 당신은 어딘가에 delete firstptr하는 것을 잊지 마세요

myfirstclass * firstptr = new myfirstclass(); 

같은 것을 할 필요가있다.
또는 단지 당신이 int x[4];을 가지고 있기 때문에 당신이 4 개 항목이, 당신이

firstptr -> x[4]; 

을 사용하는 스택

myfirstclass first; 

다음을 사용하므로 x[0], x[1], x[2]x[3]에 액세스 할 수 있습니다. 더 x[4]

참고가 없습니다 - 당신은 스택을 사용하는 경우 대신 대신 당신은 사용하기 전에 객체를 생성해야 ->

first.x[i]; 
+0

할당에 대한 요점을 놓쳤다. 지금은 하겠지만, 같은 문장에서 같은 세분화 오류가 발생한다.이 firstptr -> x [i]를 할당하면된다는 뜻이다. 일부 계산을 수행하기 위해 다른 배열로, 세그먼트 오류가 발생했습니다. y [i] = firstptr -> x [i]; – redRose

+0

@redRose 왜 스택 변수를 대신 사용하지 않습니까? – doctorlove

1

.를 사용합니다. 뭐 그런 :

myfirstclass * firstptr = new myfirstclass(); 

또는 사용 폐기해야 동적으로 할당 된 객체

myfirstclass firstptr; 
int y[4]; 
for (int i=0; i<4;i++){ 
    y[i]= firstptr.x[i]; -> "This statement what caused the segmentation fault." 
} 

위해 당신 X 액세스는 공개해야한다 : 사실

class myfirstclass { 
public: 
int x[4]; 
}; 

, 데이터 필드 bublic을 권장하지 않습니다.

+0

s/buplic/public – doctorlove

+0

@Ivan 할당에 관한 요점을 놓쳤다. 지금도 그러지 만, 같은 문장에서 같은 세분화 오류가 발생한다.이 firstptr -> x [i]를 할당하면된다는 뜻이다. 일부 계산을 수행하기 위해 다른 배열로, 세그먼트 오류가 발생했습니다. y [i] = firstptr -> x [i]; – redRose

+0

@redRose 코드를 표시 할 수 있습니까 (수정 사항은 어떻게 보입니까)? – Ivan

관련 문제