我想创建一个项目,其中要求使用共享内存来创建学生报告。要求用户创建学生人数报告并动态分配内存。 但是当我尝试附加它时,它会进入错误检查if语句,并且在打印错误消息后它会打印成功。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
typedef struct student
{
int id;
char name[20];
int maths;
int science;
int english;
}student;
int main()
{
student *ptr;
int n;
printf("enter the number of records you want to insert");
scanf("%d",&n);
ptr = (struct student*) malloc(n*sizeof(student));
int shmid;
key_t key = 9876;
shmid = shmget(key,(sizeof(ptr)*sizeof(student)), IPC_CREAT | 0666);
if(shmid < 0)
{
perror("shmget");
exit(1);
}
void* shm = shmat(shmid, NULL, 0);
if(shm = (void*) -1)
{
perror("Not attached");
exit(1);
}
return 0;
}
您需要考虑此行在做什么:
if(shm = (void*) -1)
正确的方法是:
if(shm == -1)