[英]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.