Я пробую следующую программу и получаю кучу повреждений, что и ожидается. Ниже приведен код ниже:
int main()
{
int A[] = { 2,4,16,32,0,0,0,0 };
int B[] = { 5,17,31,35 };
int i = 0, j = 0,k=0;
int length = sizeof(A) / sizeof(A[0]);
int* temp = new int[length];
while (k<length && A[k]!=0)
{
if (A[i] < B[j])
{
temp[k] = A[i];
i++;
}
else
{
temp[k] = B[j];
j++;
}
k++;
}
//copythe remaining items in A[] into temp.
while (i < length && A[i] != 0)
{
temp[k] = A[i];
i++; k++;
}
//copy the remaining items in B[] into temp.
while (j < length)
{
temp[k] = B[j];
j++; k++;
}
cout << "the sorted array is: ";
for (int i = 0; i < length; i++)
{
cout << temp[i] << ", ";
}
return 0;
}
Произошло повреждение кучи, потому что я пишу за пределы массива temp
. По моему мнению, повреждение кучи должно было произойти в строке 7244, где я назначаю B [j] для temp [k] - и k превышает length
(то есть 8) - как выделено ниже:
Но повреждение кучи происходит намного позже, в строке 7250 - где я пытаюсь cout<<temp[0]
. -
У меня есть пара вопросов:
- Почему происходит повреждение кучи при попытке прочитать
temp[0]
- поскольку все должно быть хорошо при попытке прочитать temp[0]
? - Почему повреждение кучи не происходит в самой строке 7244, где я назначаю
B[j]
для temp[k]
и k
превышает length
. - Почему повреждение кучи прерывается. Я поражал кучу коррупции 4-5 раз в начале, но не ударил ли она сейчас?