나는 다음 클래스 선언이 :힙 손상 -로드 파일 (스태틱)
class StaticMesh
{
public:
unsigned int v_count;
float* vertices;
unsigned int n_count;
float* normals;
void Load_lin(const char* file);
void Draw(void);
void Release(void);
};
이 클래스 (이 이름은 표시의로) 파일을 .lin로드 할 수 있습니다 정적 메쉬를 나타냅니다.
.lin 파일은 C#을 사용하여 만든 다른 응용 프로그램에서 생성됩니다. 이 애플리케이션 파일 .OBJ 판독하고,이 구조를 갖는 .lin 파일 생성
V 정점의 개수 N 법선 수, A/B가있다v_count v
n_count n
a#a#a
b#b#b
a#a#a
b#b#b
좌표를 표현한다.
Load_lin (CONST의 char *)는이 파일을로드하는 기능이며, 여기있다 :이 기능에 오류의 원인을 좁혀했습니다
void StaticMesh::Load_lin(const char* file)
{
std::ifstream in (file);
if (!in)
{
std::cout << "Error: Failed to load staticmesh from '" << file << "'." << std::endl;
return;
}
char buffer[256];
in.getline(buffer, 256);
sscanf_s(buffer, "v_count %i", &v_count);
in.getline(buffer, 256);
sscanf_s(buffer, "n_count %i", &n_count);
vertices = new float[v_count];
normals = new float[n_count];
unsigned int a = 0;
unsigned int p = 0;
float x, y, z;
do
{
in.getline(buffer, 256);
if (buffer[0] == '\n' || buffer[0] == '\r') break;
sscanf_s(buffer, "%f#%f#%f", &x, &y, &z);
vertices[a++] = x;
vertices[a++] = z;
vertices[a++] = y;
in.getline(buffer, 256);
sscanf_s(buffer, "%f#%f#%f", &x, &y, &z);
normals[p++] = x;
normals[p++] = z;
normals[p++] = y;
} while (!in.eof());
in.close();
}
그러나 오류는 쇼 응용 프로그램이 닫히고 때로는 발생하지 않습니다.
return msn.message;
내가 더 가서 변수 'A'와 'P',이 원인을 인쇄하는 표준 : : cout을 사용했습니다 :
그래서 오류가 발생한 라인은 실제의 WinMain의 끝 힙 손상 오류,하지만 malloc.c를 라인 (55)이 시간 :__forceinline void * __cdecl _heap_alloc (size_t size)
{
if (_crtheap == 0) {
_FF_MSGBANNER(); /* write run-time error banner */
_NMSG_WRITE(_RT_CRT_NOTINIT); /* write message */
__crtExitProcess(255); /* normally _exit(255) */
}
return HeapAlloc(_crtheap, 0, size ? size : 1);
} // LINE 55
나는 아무 소용이 마지막 오류를 검색했습니다.
감사합니다. :)
로 할당을 수정합니다. –