함수내에서 malloc한 변수 사용 문제

purenous의 이미지

*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;
}

뭔가 짜면서도 미심쩍었고..어디가 잘못된 것 같긴 한데..
어디가 잘못된건지 모르겠네요...ㅠ.ㅠ

lifthrasiir의 이미지

*ppStruct[nIndex].a는 *(ppStruct[nIndex].a)로 해석됩니다. (*ppStruct[nIndex]).a라고 써야 겠죠. 웬만하면 구조체 포인터 필드를 접근할 때는 ->를 무조건 써 주는 것도 나쁘지 않은 습관입니다.

purenous의 이미지

(*ppStruct[nIndex]).a 로 쓰니 뭔가 결합우선순위에 문제가 있었는지
루프를 몇번 돌다가 access violation이 났습니다.
한참동안 어디가 잘못됐을까 생각하다 포인터변수명(주소값)에 인덱스를 붙여 배열로 사용한다고 하면...
(*ppStruct)[nIndex].a 로 쓰는게 맞지 않을까..하는 생각을 해봤는데 되는군요!