【问题标题】:UBUNTU on VMWARE Segmentation fault (core dumped)VMWARE 分段故障(核心转储)上的 UBUNTU
【发布时间】:2011-05-25 15:07:06
【问题描述】:

对不起,如果我的英语很糟糕:我真的很紧张:( 我正在使用作为虚拟机工作的 Ubuntu 11.04。使用VMWARE作为虚拟机操作系统的是windows 7。 我正在尝试用 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",O_RDWR|O_CREAT,0600);

    for(i=0;i<50;i++){
      if(Numbers[i]%2==0){
    write(fileeven,&Numbers[i],sizeof(Numbers[i]));
      }else{
    write(fileodd,&Numbers[i],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 结果:分段错误(核心转储)

感谢您的时间和回复我真的很需要......

【问题讨论】:

  • VMware 会导致这样的错误非常奇怪。显然,请尝试在 VMware 下未运行的“真实”Linux 安装上的代码来确认。更有可能是您的代码中存在错误。
  • 谢谢你的建议,如果可行,我会试试这个,我会告诉你...
  • 是程序的bug,不是VMWare的问题。您应该发布您的 getmem() 函数。也许你应该检查它是否失败。 open() 调用也一样,它们可能会失败。
  • 如果我没有任何想法,我的第一个动作是(尽管这很明显,正如 sth 指出的那样),将是在 Valgrind 下运行我的程序 :) ... 轻松简单跟踪错误。

标签: c linux ubuntu vmware


【解决方案1】:

假设getmem 将多个字节作为参数,则为数字数组分配 327 个字节:

Numbers=(int*)getmem(327);

如果您使用 8 字节 int 的 64 位系统,这对于 40 个整数来说已经足够了。

然后您继续将 50 个数字放入该数组,超过您分配的空间。这很可能会导致分段错误。

通常,在调试器中启动您的程序以查看分段错误发生的确切位置。这样您可以更轻松地定位程序中的错误。

【讨论】:

    【解决方案2】:

    正如 Marc B 所说,问题出在 VMWare 上。我在一个真实的操作系统上尝试过它并且它有效。 getmem() 函数不是我自己的函数。要使用它,您必须在编译行的末尾添加“-shared”。谢谢回复...

    【讨论】:

      猜你喜欢
      • 2016-09-09
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多