在C中将动态数组从函数返回到main

时间:2013-12-01 02:17:44

标签: arrays pointers

返回到main的数组,编译但在运行时给出了lap2:malloc.c:2451:sYSMALLOc消息。我认为错误与minutes()和seconds()有关。非常感谢帮助。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N 25

int *minutes(float);
float *seconds(float);

int main ()
{ 
    int *m;
    float speed,min,sec,*s;
    printf("Enter minute and seconds\n");
    scanf("%f %f:\n", &min, &sec); 
    speed = ((min * 60) + sec) / N;
    m = minutes(speed);
    s = seconds(speed);
    printf("%p:%p\n",m,s);
    free(m);
    free(s);
    return 0;
}
int *minutes(float l)
{
    int i,*h;
    h = calloc(N,sizeof(int));
    if(!h){
        printf("memory failure\n");
        exit(1);
    }
    for(i=1;i<=N;i++)
        h[i] = ((int) l * i) / 60;     
    return h; 
}
float *seconds(float m)
{
    int i;
    float j,*k;
    k = calloc(N,sizeof(float));
    if(!k){
        printf("memory failure\n");
        exit(2);
    }
    for(i=1;i<=N;i++)
        j = i * m;
    k[i] = fmod(j,60.0);
    return k;
}

1 个答案:

答案 0 :(得分:0)

seconds(float)函数中

for(i=1;i<=N;i++)
  j = i * m;
k[i] = fmod(j,60.0);

应该是

for (i = 1; i <= N; i++) {
  j = i * m;
  k[i] = fmod(j, 60.0);
}

至少,当我使用它时它似乎起作用......例如。

Enter minute and seconds
10 5 :
0xe1b010:0xe1b080