[英]Stack smashing detected after one successful
在我的麻煩中,在我執行程序的正確輸出時間(可能更多時間)之后,第二個導致“檢測到堆棧粉碎”錯誤! (我執行相同的二進制文件)。 誰發現這里的問題? 為什么 ? 我的命令:
phuocblack@phuocblack-X455LAB:~/.project$ gcc TEST.c -oa 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 終止中止(核心轉儲)
我的代碼:
#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++)
原因是你不能在循環中再次設置變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.