新手_段错误,指针的问题,没明白!C/C++ code1 #include sys/types.h2 #include sys/ipc.h3 #include s
新手_段错误,指针的问题,没明白!
C/C++ code 1 #include <sys/types.h> 2 #include <sys/ipc.h> 3 #include <stdio.h> 4 #include <errno.h> 5 #include <sys/shm.h> 6 #include <stdlib.h> 7 #include <string.h> 8 #include <time.h> 9 10 typedef struct{ 11 char name[4]; 12 int age; 13 }people; 14 15 int main(int argc,char *argv[]) 16 { 17 int shm_id; 18 key_t key; 19 people *p_map; 20 time_t seed = time(NULL); 21 srand((int)seed); 22 key = rand(); 23 24 shm_id=shmget(key,4096,IPC_CREAT); 25 p_map=(people*)shmat(shm_id,NULL,0); 26 (*p_map).age=20; 27 (*(p_map+1)).age=21; 28 return 0; 29 } 30 31
第26、27行“段错误”,为什么不行啊???
[解决办法]#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <errno.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct{
char name[4];
int age;
}people;
int main(int argc,char *argv[])
{
int shm_id;
key_t key;
people *p_map;
time_t seed = time(NULL);
srand((int)seed);
key = rand();
shm_id=shmget(key,4096,IPC_CREAT);
p_map=(people*)shmat(shm_id,NULL,0);
(*p_map).age=20;
(*(p_map+1)).age=21;
(*(p_map+2)).age=22;
printf("%d\n", (p_map)->age);
printf("%d\n", (p_map+1)->age);
printf("%d\n", (p_map+2)->age);
return 0;
}
输出:
20
21
22
程序运行正常,没段错误;
[解决办法]shm_id=shmget(key,4096,IPC_CREAT);
这里有问题,你没有加权限,所以shmat映射的时候失败了,改成
shm_id=shmget(key,4096,IPC_CREAT|0666);就行了
[解决办法]同意koutatu,我是在root权限下运行的
[解决办法]