[英]*** stack smashing detected ***: <unknown> terminated Aborted (core dumped)
我正在尝试编写一个程序,该程序读取一个包含 15 个元素的数组,并为每种数字只输出一次该数组中的数字(不输出重复)。 我收到标题中的错误,我不知道为什么。 这是我的代码:
#include <stdio.h>
void main () {
int initial[15], final[15], nf=1, aux;
printf("Insert the 15 elements:\n");
for (int i = 0; i < 15; ++i)
{
printf("Insert the %dº element:\n",i+1);
scanf("%d", &initial[i]);
}
final[0]=initial[0];
for (int i = 1; i < 15; ++i)
{
for (int k = 0; k < nf ; ++k)
{
if (initial[i]!=final[k]) {
final[nf]=initial[i];
nf++;
}
}
}
for (int c = 0; c < nf ; ++c)
{
printf("%d, ",final[c]);
}
}
您的内部循环逻辑有缺陷。 当元素不同时,条件initial[i]!=final[k]
将得到满足,这不是您想要的。 您想检查initial[i]
是否存在于final
数组中。
for (int i = 1; i < 15; ++i)
{
bool found = false;
for (int k = 0; k < nf ; ++k)
{
if (initial[i]==final[k]) {
found = true;
break; // Found a dup, no need to continue further.
}
}
// Not present in final array, so include it.
if (!found) final[nf++] = initial[i];
}
在不考虑您真正想用阵列做什么的情况下,下面解释了一些潜在的缺陷。 您会在调试模式下看到水晶清晰地观察k
和nf
值的变化。 或者使用控制台打印。
for (int k = 0; k < nf ; ++k) { // risky algorithm: k used as index of array, with no array bound check
if (initial[i]!=final[k]) { // risk here with k, uncheked array index: what if k > array length ?
final[nf]=initial[i]; // risk here with nf, uncheked array index: what if nf > array length ?
nf++; // risky algorithm: for loop stop condition is changed at each iteration
}
}
试试这个算法。 希望它可以工作:
def firstNonRepeating(arr, n):
for i in range(n):
j = 0
while(j < n):
if (i != j and arr[i] == arr[j]):
break
j += 1
if (j == n):
return arr[i]
return -1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.