【发布时间】:2021-01-13 03:51:28
【问题描述】:
在我的麻烦中,当我执行程序时,在正确的输出时间(可能更多时间)之后,第二个导致“检测到堆栈粉碎”错误! (我执行相同的二进制文件)。 谁发现这里的问题?为什么 ? 我的命令:
phuocblack@phuocblack-X455LAB:~/.project$ gcc TEST.c -o a phuocblack@phuocblack-X455LAB:~/.project$ ./a 1 2 3 3 4 5 7 12 22 66 phuocblack@phuocblack-X455LAB:~/.project$ ./a -1591423488 1 2 3 3 4 5 7 12 22 *** 检测到堆栈粉碎 ***: ./a terminate Aborted (core dumped)
我的代码:
#include <stdio.h>
void swapp(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
int main(void)
{
int i = 0;
int arr[10] = {12,3,4,5,2,66,7,1,22,3};
while (i < 10)
{
if (arr[i] <= arr[i+1])
{
i++;
}
else
{
swapp(&arr[i], &arr[i+1]);
if (i > 0)
{
i--;
}
}
}
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
请在此处解释它的显示方式和内存问题!我是新人@@
【问题讨论】:
-
表达式
if (arr[i] <= arr[i+1])将导致对数组的越界访问。即arr[10],swapp(&arr[i], &arr[i+1]);。 -
那为什么第一次是正确的!?
-
当
i == 9然后i+1 = 10,然后arr[i+1]访问arr[10]超出范围。
标签: c memory out-of-memory