丢失数组指针值?

时间:2019-09-30 14:14:06

标签: 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]);
    }
    ...
}

我正在测试的文件包含1到6之间的数字。在功能loadDataset中,打印结果为

1
2
3
4
5
6

但是回到main功能时,打印结果是

1
2
3
4
5
0

可能是什么问题?
很抱歉,如果我不愿意这样做,但我对用C编程不是很熟悉。

1 个答案:

答案 0 :(得分:5)

此表达式

fscanf(fp, "%d", &dataSet[sizeof(int) * i]);
                          ^^^^^^^^^^^^^^^      

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

改为使用

fscanf(fp, "%d", &dataSet[i]);

fscanf(fp, "%d", dataSet + i);