Указатели внутри сегмента разделяемой памяти

Я пытался это сделать часами и гуглил все, что мне приходит в голову, но я схожу с ума.

У меня есть структура:

typedef struct {
  int rows;
  int collumns;
  int* mat;
  char* IDs_row;
} mem;

Я не знаю размеров int* (Matrix) и char* на потом.

Когда я это делаю, я создаю разделяемую память следующим образом:

mem *ctrl;
int size = (2 + ((i-1)*num_cons))*sizeof(int) + i*26*sizeof(char); //I have the real size now
shmemid = shmget(KEY, size, IPC_CREAT | 0666);
if (shmemid < 0) {
    perror("Ha fallado la creacion de la memoria compartida.");
    exit(1);
}
ctrl = (mem *)shmat(shmemid, 0, 0);
if (ctrl <= (mem *)(0)) {
    perror("Ha fallado el acceso a memoria compartida");
    exit(2);
}

Здесь нет проблем. Затем я задаю значение ctrl-> rows и columns и присваиваю 0 всей матрице.

Но после этого я что-то пишу в char* и бац, ошибка сегментации.

При отладке программы я увидел, что оба указателя, мат и IDs_row, где null. Как мне дать им правильные значения внутри сегмента общей памяти??

Я попытался удалить указатель char*, просто чтобы попробовать, а затем ошибка сегментации была в другой программе, которая подключалась к указанной общей памяти и просто проверяла значения внутри матрицы (проверка -> строк и - >колонки прошли успешно)

9
задан Griwes 27 May 2012 в 20:00
поделиться