一次成功后检测到堆栈粉碎
Stack smashing detected after one successful
在我的麻烦中,在我执行程序时经过正确的输出时间(可能更多时间)后,第二次导致“检测到堆栈粉碎”错误! (我执行相同的二进制文件)。
谁发现这里的问题??为什么 ?
我的命令:
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
*** stack smashing detected ***: ./a terminated 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;
}
请在这里解释它的显示方式和内存问题!我是新人@@
问题是当您的参数 i == 9
试图访问您没有的第 10 个单元格时。
这个错误出现在两个地方:if (arr[i] <= arr[i+1])
和 swapp(&arr[i], &arr[i+1]);
。
这里修复了有效的代码:
while (i < 10 && i + 1 < 10) {
if (arr[i] <= arr[i + 1])
i++;
else {
swapp(&arr[i], &arr[i + 1]);
if (i > 0)
i--;
}
}
另一个问题是您正在 C
平台上工作,因此更改行:
for (int i = 0; i < 10; i++)
至:
i = 0;
for (i; i < 10; i++)
原因是您不能在循环中再次设置变量。
在我的麻烦中,在我执行程序时经过正确的输出时间(可能更多时间)后,第二次导致“检测到堆栈粉碎”错误! (我执行相同的二进制文件)。 谁发现这里的问题??为什么 ? 我的命令:
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 *** stack smashing detected ***: ./a terminated 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;
}
请在这里解释它的显示方式和内存问题!我是新人@@
问题是当您的参数 i == 9
试图访问您没有的第 10 个单元格时。
这个错误出现在两个地方:if (arr[i] <= arr[i+1])
和 swapp(&arr[i], &arr[i+1]);
。
这里修复了有效的代码:
while (i < 10 && i + 1 < 10) {
if (arr[i] <= arr[i + 1])
i++;
else {
swapp(&arr[i], &arr[i + 1]);
if (i > 0)
i--;
}
}
另一个问题是您正在 C
平台上工作,因此更改行:
for (int i = 0; i < 10; i++)
至:
i = 0;
for (i; i < 10; i++)
原因是您不能在循环中再次设置变量。