丢失数组指针值?

dac*_*ace 3 c arrays pointers

我正在创建一个用于将数字从文件读入数组的函数。但是从函数返回后,似乎丢失了最后一个值。这是我的代码:

void loadDataset(int* dataSet, int DataSetSize, char *filename) {
    FILE *fp;
    fp = fopen( filename , "r" );

    for(int i=0; i< DataSetSize; i++){
        fscanf(fp, "%d", &dataSet[sizeof(int) * i]);
    }

    for (int i = 0; i < DataSetSize; i++) {
        printf("%d\n", dataSet[sizeof(int) * i]);
    }

    fclose(fp);
}

int main(int argc, char *argv[]) {
    ...
    int* ds = malloc(sizeof(int) * DataSetSize);
    loadDataset(ds, DataSetSize, DatasetFilename);

    for (int i = 0; i < DataSetSize; i++) {
        printf("%d\n", ds[sizeof(int) * i]);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

我正在测试的文件包含从1到6的数字。在运行时loadDataset,打印结果为

1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)

但是当恢复main功能时,打印结果是

1
2
3
4
5
0
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?
我很抱歉,如果我没想到这很琐碎,但是我对用C编程不是很熟悉。

Vla*_*cow 5

这个表达

fscanf(fp, "%d", &dataSet[sizeof(int) * i]);
                          ^^^^^^^^^^^^^^^      
Run Code Online (Sandbox Code Playgroud)

没有道理。使用这种表达式的结果是程序具有未定义的行为,因为尝试访问分配的数组外部的内存。

改用

fscanf(fp, "%d", &dataSet[i]);
Run Code Online (Sandbox Code Playgroud)

要么

fscanf(fp, "%d", dataSet + i);
Run Code Online (Sandbox Code Playgroud)