[英]C stack smashing detected in array
我正在嘗試解決一個問題。
如果在數組中重復了一個數字,我將他設為 0。我的代碼拋出錯誤,您能幫幫我嗎?
#include <stdio.h>
int main() {
int a[] = {-3, -2, -1, -7, -3, 2, 3, 4, 2, 7, 10, 3};
int length = 12;
int zero_duplicates(int laenge, int *a) {
int zero[] = {};
int k = 0;
int j = 1;
for(int x=0; x<laenge; x++)
{
if (zero[*a] == 1) {
*a = 0;
} else {
zero[*a] = 1;
k++;
}
a++;
}
return k;
}
int count = zero_duplicates(length, a);
printf("%d -- ", count);
for(int i = 0; i < length; i++) printf(" %i ", a[i]);
return 0;
}
這個...
int zero[] = {};
... 不是 C 中的有效數組聲明。 如果你的編譯器接受它作為擴展,那么它至少應該發出警告,即使這樣,它也可能並不意味着你認為它的意思。 具體來說,最可能的擴展之一是將其解釋為聲明一個長度為零的數組(這也將構成一個擴展),這樣訪問任何元素都會超出數組邊界。
此外,無論數組有多長,如果輸入數組的任何元素為負數(如示例中的情況),則當a
指向 1 時, zero[*a]
將構成越界訪問那些元素。
總的來說,您需要一種不同的方法。 你試圖做的事情是不可行的。
另外,C 不支持嵌套函數,因此您的代碼在這方面依賴於另一個擴展。 這個特殊問題可以通過將嵌套的 function 提升出main()
來解決,但是,將其放在上面而不是里面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.