무료 (위치)를 실행할 때 문제가 있습니다.C/C++에서 malloc과 free를 사용하고 오류가 발생했습니다. HEAP CORRUPTION DETECTED
void printTree(nodeT node, int hieght)
{
int *position;
position = (int*)malloc(hieght * sizeof(int*));
for (int i = 0; i <= hieght; i++)
{
position[i] = 0;
}
BOOLEAN DONE = FALSE;
while (DONE == FALSE)
{
printMoveDown(&node, position);
printLEAFNode(&node, position);
DONE = printMoveUp(&node, position);
printSingleKey(&node, position);
}
free(position);
position = NULL;
}
내가 VS2010에서 얻을 전체 오류 메시지가 감지 힙 손상이 : 0x00031390에서 정상 블록 (# 64) 후. CRT는 응용 프로그램이 힙 종료 후에 메모리에 쓴 것을 감지했습니다. 내가 적은 물건은 내가 문제를 좁힐 수 있는지에가는 같은 상황을 설정하려고 dbgheap.c
extern "C" void __cdecl _free_dbg_nolock
line 1376: if (!CheckBytes(pbData(pHead) + pHead->nDataSize, _bNoMansLandFill, nNoMansLandSize))
if (pHead->szFileName) {..}
else { this is where the program stops }
:
디버거에서에서 동안 문제가 발생했다.
void function (int y)
{
int *x;
x = (int*)malloc(y * sizeof(int*));
free(x);
x = NULL;
}
for 루프 및 while 루프가없는 경우와 같습니다. 이 작동합니다. for 루프를 제거하면 작동하게됩니다. 나는 이유를 모른다. 나는 CRT가 무엇인지 보았다. 그러나 그것은 나에게 꽤 새로운 개념이었고, 나는이 CRT에 대해 알지 못해도이 문제를 해결할 수 있다고 가정한다.
for 루프는 위치를 위해 할당 된 메모리에 값을 할당합니다. 그 이유는 왜 이것이 문제를 일으키는 지 생각할 수 없습니다. 실제로 생각해보십시오. 루프를 높이 + 1로 변경하여 문제를 해결했습니다.
감사합니다. calloc을 사용하여 주셔서 감사합니다. 일관성을 위해 <= in 루프를 사용하는 것을 피하려고합니다. 나는 내가 가지고있는 문제들 때문에 그것을 바꿨다고 생각한다. – MykC
실로, 당신의 답은 OP의 코드에서 추악하고 잠재적으로 해로운 캐스트를 제거해야합니다. –
@ R, 좋은 제안입니다. 제목은 C/C++라고했지만 질문은 C라고 했으므로 제거했습니다. –