【发布时间】:2017-01-27 11:18:32
【问题描述】:
我是指针的新手,我正在尝试实现一个简单的代码,在其中我读取和写入一个数组,并且我还搜索两个给定索引之间的最小元素。 出于某种原因, write() 函数会打印大值(我猜它们是存储值的位置)。当我运行 poz_minVal 函数时,我也会收到一个 SIGSECV。 我知道这是一个小问题,但任何帮助都将不胜感激!
代码如下:
#include<stdio.h>
#include<stdlib.h>
int read(int *v, FILE *f){
int i,length;
fscanf(f,"%d",&length);
v = (int *)malloc(length*sizeof(int));
for(i=0;i<length;++i)
fscanf(f,"%d",v+i);
return length;
}
void write(int *v, int length, FILE *g){
int i;
for(i=0;i<length;++i)
fprintf(g,"%d ",*(v+i));
fprintf(g,"\n\n");
}
int poz_valMin(int *v, int length,int left,int right){
int k,mini = *v; //set mini as the 1st element in v
for(k=left;k<right;++k)
if(*(v+k) < mini)
mini = *(v+k);
return mini;
}
int main(){
FILE *f = fopen("datein.txt","r");
FILE *g = fopen("dateout.txt","w");
int *v, n = read(v,f);
write(v,n,g);
fprintf("The minimum value between the indexes 2 and 4 is: %d.\n\n",poz_valMin(v,n,2,4));
return 0;
}
【问题讨论】:
-
请显示输入数据。
-
哪一行?输入数据在哪里?
-
你用指针弄错了!! :)
-
你也忘了释放 v.
-
写成
v[i],而不是*(v+i),更容易也更惯用。