从malloc函数返回的内存不保存数据

时间:2015-05-07 09:33:27

标签: c

在下面的代码中,我不明白为什么win[]没有得到值。我已经在下面的代码中评论了我感到困惑的地方。    请帮助我们。    我在做任何概念上的错误。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

void winner(int *speed,int *distance,int rats){
    float winner=(float)distance[0]/speed[0];
    float time;
    float *win=malloc(rats * sizeof(float));
    memset(win,0,rats*sizeof(float));
    for(int i=0;i<rats;i++) {
        time=(float)distance[i]/speed[i];
        if(time<=winner) {
            win[i]=time;   /*Problem is here*/ 
        }
    }
    for(int i=0;i<rats;i++) {
        if(win[i]!=0) {
            printf("%d\n",i+1);
        }
    }
    free(win);
}

int main() {
    int rats;
    int *speed,*distance;
    scanf("%d",&rats);
    speed=malloc(rats * sizeof(int));
    distance=malloc(rats * sizeof(int));
    for(int i=0;i<rats;i++) {
        scanf("%d",&speed[i]);
    }
    for(int i=0;i<rats;i++) {
        scanf("%d",&distance[i]);
    }
    winner(speed,distance,rats);
    free(speed);
    free(distance);
    return 0;

}

1 个答案:

答案 0 :(得分:0)

您的代码中至少有3个问题:

  • 如果一只老鼠的时间短于第一只
  • ,则不会更改winner
  • 您没有为不是赢家初始化win[i]
  • 你没有利用最佳时间来展示获胜的老鼠

所以而不是:

    if(time<=winner){
       win[i]=time;   /*Problem is here*/
     }

你应该:

    win[i]=time; // always initialize !
    if(time<=winner){
       winner = time; // keep best time
    }

然后代替

for(int i=0;i<rats;i++){
  if(win[i]!=0){
      printf("%d\n",i+1);
     }
 }

你应该:

for(int i=0;i<rats;i++){
  if(win[i] == time){ // display all rats having best time
      printf("%d\n",i+1);
     }
 }