D3DXVECTOR3* v = NULL;
void CreateIndex(int num, D3DXVECTOR3* buf)
{
buf = new D3DXVECTOR3[num];
for(int i = 0 ; i < num ; i++)
{
buf[i].x = i * num + 50;
buf[i].z = i * num + 50;
buf[i].y = 0.0f;
}
}
void Deleteindex(D3DXVECTOR3* buf)
{
delete []buf;
}
D3DXVECTOR3 GetValue(int x, D3DXVECTOR3* buf)
{
D3DXVECTOR3 ret = buf[x];
return ret;
}
int _tmain(int argc, _TCHAR* argv[])
{
CreateIndex(30, v);
for(int i = 0 ; i < 30 ; i++)
{
D3DXVECTOR3 temp = GetValue(i, v);
printf("%f, %f, %f\n", temp.x, temp.y, temp.z);
}
Deleteindex(v);
return 0;
}
이렇게 만들어서 테스트 중인데
D3DXVECTOR3 GetValue(int x, D3DXVECTOR3* buf)
{
D3DXVECTOR3 ret = buf[x];
return ret;
}
에서 D3DXVECTOR3 ret = buf[x]; 부분이 잘못된것 같습니다.
계속 이 부분에서 실행 에러가 나는데 계속 고민하고 고쳐봤더니 이제 머리가 더이상 안돌아가서 도움을 요청합니다. 에혀..
언제쯔음 이런것을 바로바로 고치는 날이 올지 ㅜㅜ
지금과 같은 방법으로 생성하게 되면 함수를 빠져나오면서 객체의 주소가 담긴 buf도 사라지기 때문에 메모리 누수가 발생합니다.
해결방법은 아래와 같이 이중포인터를 사용하시면 됩니다.
void CreateIndex(int num, D3DXVECTOR3** buf)
{
*buf = new D3DXVECTOR3[num];
for(int i = 0; i < num ; i++)
{
(*buf)[i].x = i * num + 50; //위나 아래의 방식 아무렇게나 사용해도 무관합니다.
(*buf+i)->z = i * num + 50;
...
}
}