함수내에서 malloc한 변수 사용 문제
글쓴이: purenous / 작성시간: 월, 2008/06/09 - 5:45오후
*ppStruct[nIndex].a = 1; 이부분에서 illegal indirection error가 나는데요.
흠.. 배열인덱스로 멤버에 접근하는데도 '->' 써야되는건지...
left operand points to 'struct', use '->' 요런 메시지가 나와서
그렇게 바꿔봤는데도 여전히 에러가 납니다.
typedef struct { int a; int b; }T_STRUCT; void fn(T_STRUCT** ppStruct, int nSize) { int nIndex; *ppStruct = (T_STRUCT*)malloc(sizeof(T_STRUCT) * nSize); for(nIndex = 0; nIndex < nSize; nIndex++) { *ppStruct[nIndex].a = nIndex; *ppStruct[nIndex].b = nIndex * 2; } } int main(int argc, char* argv[]) { T_STRUCT* pStruct; int nSize = 10000; fn(&pStruct, nSize); return 0; }
뭔가 짜면서도 미심쩍었고..어디가 잘못된 것 같긴 한데..
어디가 잘못된건지 모르겠네요...ㅠ.ㅠ
Forums:
*ppStruct[nIndex].a는
*ppStruct[nIndex].a는 *(ppStruct[nIndex].a)로 해석됩니다. (*ppStruct[nIndex]).a라고 써야 겠죠. 웬만하면 구조체 포인터 필드를 접근할 때는 ->를 무조건 써 주는 것도 나쁘지 않은 습관입니다.
(*ppStruct[nIndex]).a 로
(*ppStruct[nIndex]).a 로 쓰니 뭔가 결합우선순위에 문제가 있었는지
루프를 몇번 돌다가 access violation이 났습니다.
한참동안 어디가 잘못됐을까 생각하다 포인터변수명(주소값)에 인덱스를 붙여 배열로 사용한다고 하면...
(*ppStruct)[nIndex].a 로 쓰는게 맞지 않을까..하는 생각을 해봤는데 되는군요!
댓글 달기