Я сейчас экспериментирую с C
, распределением памяти и общей памятью.Мне нужна помощь, код такой:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include "shared_memory.h"
#include "semaphore.h"
#include "errExit.h"
struct Node {
int ID;
char password[10];
struct Node *next;
};
key_t shmKeyServer = 131;
size_t size = (sizeof(struct Node)) * 100;
int main (int argc, char *argv[]) {
int shmidServer = alloc_shared_memory(shmKeyServer, size);
struct Node *node = (struct Node *)get_shared_memory(shmidServer, 0);
//fill all the structs
for(int i=0;i<100;i++){
node->ID = i;
sprintf(node->password, "%s%i", "campo num:", i);
node->next = node + sizeof(struct Node);
printf("you are on %i cicle \n", i);
node = node->next;
}
return 0;
}
Функция alloc_shared_memory
здесь:
int alloc_shared_memory(key_t shmKey, size_t size) {
// get, or create, a shared memory segment
int shmid = shmget(shmKey, size, IPC_CREAT | S_IRUSR | S_IWUSR);
if (shmid == -1)
errExit("shmget failed");
return shmid;
}
get_shared_memory
:
void *get_shared_memory(int shmid, int shmflg) {
// attach the shared memory
void *ptr_sh = shmat(shmid, NULL, shmflg);
if (ptr_sh == (void *)-1)
errExit("shmat failed");
return ptr_sh;
}
Проблемаэто после 8-го цикла.Я получаю ошибку сегментации.Я думаю, что проблема заключается в распределении памяти или объявлении размера.