写下这个功能: int different(int input [],int size,int ** vetout); 给定具有维度大小的整数数组输入时,在动态内存中创建一个向量,该向量包含重复输入一次的所有输入元素。函数不同返回修改后的数组的大小。 我的问题是,当我编译程序时,我得到了分段错误错误。任何人都可以帮助我。
#include<stdio.h>
#include<stdlib.h>
int different(int input[],int size, int **vetout);
int main(){
int input[]={1,1,2,3,4,4,1,2,3,4};
int size=10; int n; int i; int *vetout;
n = different(input, size, &vetout);
printf("The size is : %d", n);
for(i=0;i<n;i++){printf("The array is : %d",vetout[i]);}
return 0;
}
int different(int input[],int size, int **vetout){
int i=0;int j,k;
while(i<size){
j=i+1;
while(j<size){
if(input[i]==input[j]){
for(k=j;k<=size;k++){
input[k]=input[k+1]; size--;
}
}
j++;
}
i++;
}
*vetout=(int *)malloc(sizeof(int)*size);
printf("The size is : %d",size);
for(i=0;i<size;i++){*vetout[i]=input[i];}
return size;
}
答案 0 :(得分:1)
我修改了您的功能,随意将其作为基础使用 - 这不是您问题的最佳解决方案 - 这些评论在原始实现中覆盖了您的问题
希望这可以作为指南
int different(int input[],int size, int **vetout){
int count = 0;
int found, i, j;
*vetout = malloc(sizeof(int)*size);
for ( i=0; i<size ; i++ ) {
// this loop will iterate on each element of the array
// and check if it was already listed
found = 0;
for ( j=0; j < count ; j++ ) {
//this loop checks if the value was already set in the output vector
if ( *(*vetout+j) == input[i] ) {
found = 1;
}
}
//if it was not set - then set it and increse the index 'count'
if ( !found )
{
*(*vetout+ (count++)) = input[i];
}
}
printf("The size is : %d\n", count);
return count;
}