当前位置: 技术问答>linux和unix
新手_段错误,指针的问题,没明白!
来源: 互联网 发布时间:2017-01-23
本文导语: 本帖最后由 yuncha299792458 于 2011-12-08 00:47:26 编辑 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 10 typedef struct{ 11 char name[4]; 12 i...
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
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行“段错误”,为什么不行啊???
|
shm_id=shmget(key,4096,IPC_CREAT);
这里有问题,你没有加权限,所以shmat映射的时候失败了,改成
shm_id=shmget(key,4096,IPC_CREAT|0666);就行了
这里有问题,你没有加权限,所以shmat映射的时候失败了,改成
shm_id=shmget(key,4096,IPC_CREAT|0666);就行了
|
#include
#include
#include
#include
#include
#include
#include
#include
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("%dn", (p_map)->age);
printf("%dn", (p_map+1)->age);
printf("%dn", (p_map+2)->age);
return 0;
}
输出:
20
21
22
程序运行正常,没段错误;
#include
#include
#include
#include
#include
#include
#include
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("%dn", (p_map)->age);
printf("%dn", (p_map+1)->age);
printf("%dn", (p_map+2)->age);
return 0;
}
输出:
20
21
22
程序运行正常,没段错误;
|
同意koutatu,我是在root权限下运行的
|
++