함수내에서 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 로 쓰는게 맞지 않을까..하는 생각을 해봤는데 되는군요!
댓글 달기