Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数组在C程序中被随机覆盖。可能是简单的解决方案_C_Arrays_Variables - Fatal编程技术网

数组在C程序中被随机覆盖。可能是简单的解决方案

数组在C程序中被随机覆盖。可能是简单的解决方案,c,arrays,variables,C,Arrays,Variables,我有4个函数,它们在文本文件中运行,并将值存储到问题开始时标记的指定数组中。我遇到的问题是,当我更新其中一个阵列时,其他所有阵列都不会更新或重置。例如,如果我运行getkosDS函数,它将更新数组并打印出我要查找的值。其他数组将包含零。但是,如果我注释掉getkosDS函数,下一个数组(nipsDS)将更新,而不是零!!!我很困惑 #include <mpi.h> #include <stdio.h> #include <stdlib.h> #include

我有4个函数,它们在文本文件中运行,并将值存储到问题开始时标记的指定数组中。我遇到的问题是,当我更新其中一个阵列时,其他所有阵列都不会更新或重置。例如,如果我运行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();
}
#包括
#包括
#包括
#包括
内特科斯德;
int kosNW;
int kosNZC;
恩隆国际酒店;
恩隆西北国际酒店;
国际安然公司;
int nipsND;
int nipsNW;
int nipsNZC;
国际纽约时报;
纽约州内华达州;
int nytNZC;
国际大世界;
int我的_等级;
int kosDS[3430];
int nipsDS[1500];
int enronDS[39861];
国际纽约时报[300000];
void getKOS(){
int i;
文件*MyFile;
字符行[25];
MyFile=fopen(“/home/mcconnel/BagOfWords/docword.kos.txt”,“r”);

对于
getKosDS
中的(i=0;i而言,
z
是未初始化的,因此通过写入
nipsDS[z]
实际上是在写入随机内存位置,调用未定义的行为

更新:
同样的问题也存在于
getNipsDS
函数中。

getKosDS
中,
z
是未初始化的,因此通过写入
nipsDS[z]
实际上是在写入一个随机内存位置,调用一个未定义的行为

更新:
同样的问题也存在于
getNipsDS
函数中。

getNipsDS()中的问题相同。
太棒了,非常感谢,我的老师让我们在unix服务器上工作,编译器一点也不有用。工作得很好。是的,p仍然需要等待一分钟:Pditto in
getNipsDS()
太棒了,非常感谢你,我的老师让我们在unix服务器上工作,编译器一点也不管用。工作完美是的,你还需要等一分钟:PBC不是犯罪。忽略编译器报告中的警告,大多数编译器都会报告类似的问题。看看你的编译器输出,如果你请注意,从这个错误中吸取教训,以改善您的编程未来。这是一个很大的变量。也许是对数据结构的重新思考我的编译器没有告诉我任何事情,我们运行的是unix服务器,所以我没有真正使用复杂的IDE或任何东西。矛盾的是,没有IDE编译器的输出更容易查看和理解…N无论如何,对于未初始化的变量,无论是转储到控制台窗口还是IDE的“生成消息”窗格中,都应该得到警告(至少,您可以用鼠标单击这些变量,并让源窗格突出显示错误,以备修复).不熟悉C并不是犯罪。忽略编译器报告中的警告,大多数编译器都会报告类似的问题。查看编译器输出,如果您发现有提及,请从中吸取教训,以改进您的编程未来。这是一个很大的变数。也许重新思考数据结构我的编译器没有告诉我任何信息ing是在unix服务器上运行的,所以我没有真正使用复杂的IDE或任何东西。矛盾的是,无IDE编译器的输出更容易查看和理解……不过,对于未初始化的变量,无论是转储到控制台窗口还是IDE的构建消息窗格中,都应该收到警告,(其中,您至少可以用鼠标单击它们,并让源窗格突出显示错误,以备修复)。