动态内存分配问题

时间:2015-10-24 18:01:24

标签: c memory dynamic allocation

我一直试图让这个C程序工作一段时间,但我仍然在内存分配上遇到了一些麻烦。这项工作的要点是,它应该从文件的第一行读取一个字符串,然后从第二行读取2个数字,然后是3个列向量,每个数据的成员数量是三倍之间的差异。 2读数字。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void read(char **banda, int *s, int *sf, int **vs, char **vcs, char **vd)
{
    FILE *fin;
    int i;
    fin = fopen("date.in", "r");
    *banda = (char*)malloc(50*sizeof(char));
    fgets(*banda, 50, fin);
    fscanf(fin, "%d", s);
    fscanf(fin, "%d", sf);
    fseek( fin, 1, SEEK_CUR );
    int l = 3* ( (*s)-(*sf) );
    *vcs = (char*) malloc( l * sizeof(char) );
    *vd = (char*) malloc( l *sizeof(char) );
    *vs = (int*) malloc( l * sizeof(int) );
    for( i = 0; i< l ; i++ )
    {
        fscanf(fin, "%d", vs[i]);
        fscanf(fin, " %c", vcs[i]);
        fscanf(fin, " %c", vd[i]);
        fseek( fin, 1 , SEEK_CUR );
    }
    fclose(fin);
}

int main()
{
    char *banda;
    int i;
    int s, sf;
    char *vcs;
    char *vd;
    int *vs;
    read(&banda, &s, &sf, &vs, &vcs, &vd);
    for( i = 0; i < strlen(banda) ; i++ )
    {
        printf("%c", banda[i]);
    }
    printf("%d %d\n", s, sf);
    for( i = 0; i < 3*(s-sf) ; i++ )
    {
        printf("%d %c %c\n", vs[i], vcs[i], vd[i]);
    }

}

Example input: 
Helen
2 1
1 H A
2 B C
5 K I

但是,我似乎无法为它分配内存。如果我经过i = 0(也就是数组中的第一个位置),程序会向我显示一个整洁的“分段错误”#34;。但是,如果我只为每个数组写入ONE值,它就不会崩溃。有一些我严重缺失的东西,我无法弄明白。

1 个答案:

答案 0 :(得分:1)

问题在于:

fscanf(fin, "%d", vs[i]);
fscanf(fin, " %c", vcs[i]);
fscanf(fin, " %c", vd[i]);

变量vsvcsvd是指向数组的指针。在这里,您将它们视为指针数组。您需要首先取消引用指针,然后获取要写入的数组元素,然后获取其地址:

fscanf(fin, "%d", &(*vs)[i]);
fscanf(fin, " %c", &(*vcs)[i]);
fscanf(fin, " %c", &(*vd)[i]);