我正在为我的类(class)做一些练习,但我遇到了一个问题。 练习要求用文件中的数据填充动态数组,对数据进行排序,然后删除重复数据。 我的问题在最后一个,我无法删除重复的数字。
这是我的代码:
int main(){
FILE *f;
int *v;
int n=0,i,j;
f=fopen("InteirosComRepetidos.txt","r");
v=(int*)malloc(sizeof(int));
while(!feof(f)){
v=(int*)realloc(v,(n+1)*sizeof(int));
fscanf(f,"%d\n",&v[n]);
n++;
}
OrdenarQuicksort(v,0,n);
for(i=0;i<n;i++){
printf("%d\n",v[i]);
}
//Trying to remove the duplicate
for(j=n;j>=0;j--){
if(v[j]==v[j-1])
v=(int*)realloc(v,(n-1)*sizeof(int));
}
printf("Retirados:\n");
for(i=0;i<n;i++){
printf("%d\n",v[i]);
}
system("pause");
return 0;}
谁能帮帮我?
最佳答案
这个:
for(j=n;j>=0;j--){
...
}
应该是:
for(j=n-1;j>=0;j--){
...
}
否则你就出界了。
比这个:
if(v[j]==v[j-1])
v=(int*)realloc(v,(n-1)*sizeof(int));
正在重新分配但不删除 double 。意思是如果你有
1 2 2 5
这段代码所做的就是删除 5
所以你最终会得到
1 2 2
如果您重新分配和缩小内存中的数组不会移动,它会留在原处,因此在许多情况下您仍然可以访问 5
。
关于c - 从动态数组 C 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595146/