Я пробовал это в течение нескольких часов, а google - все, что мне нравится, но я схожу с ума.Указатели внутри сегмента разделяемой памяти
У меня есть:-структуру
typedef struct {
int rows;
int collumns;
int* mat;
char* IDs_row;
} mem;
Я не знаю, что размеры Int * (матрица) и символ * недо позже.
Когда я делаю, я создать общую память, как это:
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 * и bam, segmentation fault.
Отладка программы Я видел, что оба указателя, мат и IDs_row, где null. Как предоставить им правильные значения внутри сегмента разделяемой памяти?
Я попытался удалить указатель char *, чтобы дать ему попробовать, а затем ошибка сбоя сегментации была в другой программе, подключенной к указанной общей памяти, и просто проверила значения внутри матрицы (проверка -> строки и -> collumns был успешным)
Спасибо! Я никогда не думал о том, чтобы делать shmget для каждого указателя. (Я даже не понимаю, как это работает, делая тот же вызов, но «кастинг») Теперь возникает проблема со вторым целым числом в struct, «collumns». Я помещаю «1» в один процесс, а другой процесс читает его как 62045 или что-то в этом роде. Я попытался изменить sizeof (ctrl) на sizeof (men) и 2 * sizeof (int) + sizeof (int *) + sizeof (char *), но не повезло. – Knudow
Извините, я отправил сообщение, а затем отредактировал его. Можете ли вы мне немного помочь? Теперь у меня есть проблема со вторым целым числом в структуре. – Knudow
@ user1420534, пожалуйста, задайте новый вопрос с этой новой проблемой, они, похоже, не связаны. –