0
共有メモリに文字列の行列を書き込もうとしています。私は常にセグメンテーションフォールトエラーが発生しています。セグメント化エラーが発生し続けるのはなぜですか?どのように共有メモリにマトリックスを書き込むのですか?
/* Includes */
#include <unistd.h> /* Symbolic Constants */
#include <sys/types.h> /* Primitive System Data Types */
#include <errno.h> /* Errors */
#include <stdio.h> /* Input/Output */
#include <stdlib.h> /* General Utilities */
#include <pthread.h> /* POSIX Threads */
#include <string.h> /* String handling */
#include <semaphore.h> /* Semaphore */
#include <wait.h>
#include <sys/stat.h>
#include <fcntl.h> // Para as variáveis O_CREAT, O_EXCL etc
#include <sys/mman.h>
#include <time.h>
#define str_len 10
typedef struct{
char **posix;
} line;
int main(void){
int fd;
line *m;
int data_size = sizeof(line)*4;
//char m[4][3][str_len];
//int i,j;
if ((fd = shm_open("/shm_ex13s", O_CREAT|O_RDWR,S_IRUSR|S_IWUSR)) < 0) { // Abrir o objeto da memória partilhada
fprintf(stderr, "ERROR: No shm_open()\n");
exit(EXIT_FAILURE);
}
ftruncate(fd, data_size); // Ajustar o tamanho da memória partilhada
m = (line *) mmap(NULL, data_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); // Mapear a memória partilhada
m->posix[0] = "ASDAS";
//printf("%s\n", m[0][0]);
// Desfaz mapeamento
munmap(m, data_size);
// Fecha o descritor devolvido pelo shm_open
close(fd);
// O Leitor apaga a memória Partilhada do Sistema
shm_unlink("/shm_ex13s");
exit(EXIT_SUCCESS);
exit(EXIT_SUCCESS);
}
私は 'M-> posix'はそれを使用する前に適切に初期化されるとは思いません。 – MikeCAT