动态内存分配问题

Dynamic memory allocation issue

一段时间以来,我一直在努力使这个 C 程序运行,但在内存分配方面我仍然遇到了一些大麻烦。这项工作的要点是它应该从文件的第一行读取一个字符串,然后从第二行读取 2 个数字,然后是 3 个列向量,每个列向量的成员数是两个读取数字之间的差值的三倍.

#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(也就是数组中的第一个位置),程序会显示一个整洁的 "Segmentation fault"。但是,如果我只为每个数组写入一个值,它就不会崩溃。我严重遗漏了一些东西,我就是想不通。

问题出在这里:

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]);