红联Linux门户
Linux帮助

求教

发布时间:2006-09-11 22:08:54来源:红联作者:kidiger
小弟最近在学LINUX下C编程,在调试IPC共享内存程序时,编译通过但是
运行时出现"段错误",不知是何原因引起的.很想知道引起段错误的各种原因.
示例代码:
/*书上的代码,核对过*/
/*testwrite.c*/
#include
#include
#include
#include
typedef struct {
char name[4] ;
int age ;
}people ;
main(int argc,char *argv[])
{
int shm_id , i ;
key_t key ;
char temp ;
people *p_map ;
char *name = "/dev/shm/myshm2" ;
key = ftok(name,0) ;
if(key == -1)
{
perror("ftok error") ;
}
shm_id = shmget(key,4096,IPC_CREAT) ;
if(shm_id==-1)
{
perror("shmget error") ;
return ;
}
p_map=(people*)shmat(shm_id,NULL,0) ;
temp = 'a' ;
for(i = 0 ; i <10 ; i ++)
{
temp+=1 ;
memcpy((*(p_map+i)).name,&temp,2) ;
(*(p_map+i)).age = 20 + i ;
}
if(shmdt(p_map)==-1)
perror("detach error") ;
}

/*testread.c*/
#include
#include
#include
#include
typedef struct {
char name[4] ;
int age ;
}people ;
main(int argc,char *argv[])
{
int shm_id , i ;
key_t key ;
people *p_map ;
char *name = "/dev/shm/myshm2" ;
key = ftok(name,0) ;
if(key==-1)
perror("ftok error") ;
shm_id = shmget(key,4096,IPC_CREAT) ;
if(shm_id==-1)
{
perror("shmget error") ;
return ;
}
p_map = (people*)shmat(shm_id,NULL,0) ;
for(i=0;i<10;i++)
{
printf("name : %s\n",(*(p_map+i)).name) ;
printf("age : %d\n",(*(p_map+i)).age) ;
}
if(shmdt(p_map)==-1)
perror("shmdt error") ;
}
文章评论

共有 0 条评论