2012-01-13 4 views
0

shmget 함수를 사용하여 일부 데이터를 저장하기 위해 공유 메모리를 사용하고 있습니다. 그런 다음 shmat을 사용하여 첨부하고 데이터를 저장합니다. 다음 번에 내가 그것을 첨부, 프로그램이 충돌합니다. 이 줄의 가능성은 무엇입니까?C++ 충돌시 공유 메모리

if((smemPtr = (int*)shmat(sMemId,NULL,0)) != (int *) -1) 

충돌이 발생합니까? 이 선이 충돌하는 시나리오를 알아야합니다. sMemId에는 값이 있습니다.

+2

왜 디버그 빌드를 빌드하고 gdb에서 살펴보아야합니까? – Nim

+0

충돌을 일으키는 라인이 확실합니까? – nos

+0

@elmo shmat()은 실패 할 때 (void *) - 1을 반환하므로 결과가 int *로 형변환되기 때문에 여기에 의미가 있습니다. 물론 실제로 모든 플랫폼에서 동일한 값을 반환 할 것이라고 확신하지는 않습니다. –

답변

0
(int*) (...) != (int *) -1 

다른 개체에 대한 포인터는 부호없는 값입니다. 이 코드에서 C 스타일 캐스팅 (음수) 부호없는 값으로 변환 참조하십시오. 결과는 컴파일러, 플랫폼 및 일반 경우에 따라 다르며 정의되지 않습니다.