UBUNTU关于VMWARE分段故障核心已转储

问题描述

|| 抱歉,如果我的英语太糟了:我真的很努力:( 我正在使用充当虚拟机的Ubuntu 11.04。 Windows 7使用VMWARE作为虚拟机操作系统。 我正在尝试使用C语言在Linux上编写程序:使用共享内存。当我尝试编译时没有错误,但是当我执行它时,我看到这样的错误:     分段故障(核心已转储) 我不确定,但是据我了解,VMWARE导致了这个:S 这是代码
#include<stdio.h>
#include<sys/wait.h>    //Process wait
#include <fcntl.h>  //File
//#include <cstdlib>
//#include<fstream.h>

int main(){

  printf(\"\\n Here we go...!\");
  int *Numbers;
  Numbers=(int*)getmem(327); // shared memory

  int i,ProcID;
  ProcID=fork(); //depart processor

  if(ProcID==0){          // child processor
    for(i=0;i<50;i++){
      Numbers[i]=random()%50;   
    }
  }else if(ProcID<0){
    printf(\"\\n Hmm... There is an error!\");
  }

  int Waiting;
  wait(&Waiting);   

  if(ProcID>0){          // parent processor

    int fileeven,fileodd;
    fileeven=open(\"EK_even.txt\",O_RDWR|O_CREAT,0600);
    fileodd=open(\"EK_odd.txt\",0600);

    for(i=0;i<50;i++){
      if(Numbers[i]%2==0){
    write(fileeven,&Numbers[i],sizeof(Numbers[i]));
      }else{
    write(fileodd,sizeof(Numbers[i]));
      }
    }

    close(fileeven);
    close(fileodd);

  }else if(ProcID<0){
    printf(\"\\n Hmm... There is an error!\");
  }
  return 1;
}
我正在使用它在终端上编译:gcc -o ./RUN ./EK.c -shared                 运行:./ RUN                 结果:分段故障(核心已转储) 感谢您的宝贵时间并回复我,我真的很需要...     

解决方法

假设ѭ1接受一个字节数作为参数,则为数字数组分配327个字节:
Numbers=(int*)getmem(327);
如果您使用的是8字节
int
的64位系统,则该空间足以容纳40个整数。 然后,您将50个数字放入该数组中,这超出了分配的空间。这很可能会导致分段错误。 通常,在调试器中启动程序以查看分段错误的确切位置。这样,您可以更轻松地在程序中定位错误。     ,正如Marc B所说,问题是VMWare。我在真正的操作系统上进行了尝试,并且可以正常工作。 getmem()函数不是我自己的函数。要使用它,您必须在编译行的末尾添加\“ shared \”。感谢您的回覆...