我有4个函数在文本文件中运行,并将值存储到问题开始时decalred的指定数组中。我遇到的问题是,当我更新其中一个阵列时,其他阵列都不会更新或重置。因此,例如,如果我运行getkosDS函数,它将更新数组并打印出我正在寻找的值。其他数组将包含零。但是,如果我注释掉getkosDS函数,下一个数组(nipsDS)将更新而不是零!我很困惑。
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int kosND;
int kosNW;
int kosNZC;
int enronND;
int enronNW;
int enronNZC;
int nipsND;
int nipsNW;
int nipsNZC;
int nytND;
int nytNW;
int nytNZC;
int world_size;
int my_rank;
int kosDS[3430];
int nipsDS[1500];
int enronDS[39861];
int nytDS[300000];
void getKOS(){
int i;
FILE *MyFile;
char line[25];
MyFile=fopen("/home/mcconnel/BagOfWords/docword.kos.txt","r");
for(i=0; i<5; i++){
fscanf(MyFile, "%s", line);
if(i == 0){
kosND = atoi(line);
}
if(i == 1){
kosNW = atoi(line);
}
if(i == 2){
kosNZC = atoi(line);
}
}
fclose(MyFile);
}
void getEnron(){
int i;
FILE *MyFile;
char line[25];
MyFile=fopen("/home/mcconnel/BagOfWords/docword.enron.txt","r");
for(i=0; i<5; i++){
fscanf(MyFile, "%s", line);
if(i == 0){
enronND = atoi(line);
}
if(i == 1){
enronNW = atoi(line);
}
if(i == 2){
enronNZC = atoi(line);
}
}
}
void getNips(){
int i;
FILE *MyFile;
char line[25];
MyFile=fopen("/home/mcconnel/BagOfWords/docword.nips.txt","r");
for(i=0; i<5; i++){
fscanf(MyFile, "%s", line);
if(i == 0){
nipsND = atoi(line);
}
if(i == 1){
nipsNW = atoi(line);
}
if(i == 2){
nipsNZC = atoi(line);
}
}
fclose(MyFile);
}
void getNYT(){
int i;
FILE *MyFile;
char line[25];
MyFile=fopen("/home/mcconnel/BagOfWords/docword.nytimes.txt","r");
for(i=0; i<5; i++){
fscanf(MyFile, "%s", line);
if(i == 0){
nytND = atoi(line);
}
if(i == 1){
nytNW = atoi(line);
}
if(i == 2){
nytNZC = atoi(line);
}
}
fclose(MyFile);
}
void getKosDS(){
int i;
int z;
FILE *MyFile;
char line[25];
MyFile=fopen("/home/mcconnel/BagOfWords/docstart.kos.txt","r");
for(i = 0; i<3430; i++){
fscanf(MyFile, "%s", line);
if(i != 0 && i % 2 == 1){
kosDS[z] = atoi(line);
z++;
}
}
fclose(MyFile);
}
int getNipsDS(){
int i;
int z;
FILE *MyFile;
char line[25];
MyFile=fopen("/home/mcconnel/BagOfWords/docstart.nips.txt","r");
for(i = 0; i<1500; i++){
fscanf(MyFile, "%s", line);
if(i != 0 && i % 2 == 1){
nipsDS[z] = atoi(line);
z++;
}
}
fclose(MyFile);
}
int main(int argc, char** argv)
{ MPI_Init(NULL,NULL);
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
// printf("\n%d", world_size);
MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
// printf("\n%d", my_rank);
if(my_rank == 0){
getKOS();
getEnron();
getNips();
getNYT();
getKosDS();
// getEnronDS();
// getNytDS();
printf("\ngetting complete\n");
printf("KOS location %d\n", kosDS[5]);
// printf("Enron location %d\n", enronDS[200]);
printf("Nips location %d\n", nipsDS[500]);
// printf("NYT location %d\n", nytDS[10000]);
}
else{
printf("\n%d \n", my_rank);
}
MPI_Finalize();
}
这是结果
KOS位置4875 Nips位置0
但是,如果我要评论getKosDS,结果是
KOS位置0 Nips位置28340
疯狂,如果你不能说我是C的新手
答案 0 :(得分:4)
在getKosDS
中z
未初始化,因此通过写入nipsDS[z]
,您实际上正在写入随机内存位置,从而调用未定义的行为。
更新:
同样的问题出现在getNipsDS
函数中。