【发布时间】: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 下运行我的程序 :) ... 轻松简单跟踪错误。