Bunu saatlerce deneyimledim ve google'ı düşündüğüm her şeyi google, ama deliriyorum. e kadar sonraPaylaşılan bellek bölümünün içindeki işaretçiler
typedef struct {
int rows;
int collumns;
int* mat;
char* IDs_row;
} mem;
ben int * (bir Matrix) boyutlarını bilmiyorum kömürleşmesini *:
Ben bir yapı var. Ben ne zaman
, böyle paylaştı bellek oluşturmak:
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);
}
Sorun burada. Sonra, ctrl-> satır ve kolekslerine bir değer veriyorum ve tüm matrislere 0 atayım. Ancak bundan sonra char * ve bam, segmentation hatasına bir şey yazarım.
Programdan hata ayıklama, her iki işaretçinin, matın ve IDs_row öğesinin null olduğunu gördüm. Paylaşılan bellek segmentindeki doğru değerleri nasıl verebilirim?
Sadece bir deneme yapmak için char * işaretçisini kaldırmayı denedim ve ardından segmentasyon hatası hatası, söz konusu paylaşılan belleğe bağlı olan ve matris içindeki değerleri kontrol eden diğer programda (kontrol -> satırlar ve -> collumns başarılı oldu)
Teşekkür ederiz! Her bir işaretçi için shmget yapmayı hiç düşünmemiştim. (Bunun nasıl çalıştığını anlayamıyorum bile, aynı çağrıyı yapıyor ancak "çevirmek" Artık, yapıda "collumns" içindeki ikinci tam sayı ile ilgili bir sorun var. Bir işlemde "1" yazdım ve diğer süreç 62045 ya da bunun gibi bir şey okuyor. Ben (ctrl) boyutlarını sizeof (erkek) ve 2 * sizeof (int) + sizeof (int *) + sizeof (char *) olarak değiştirmeyi denedim, ancak şans yok. – Knudow
Üzgünüm, mesajı yolladım ve daha sonra düzenledim. Bana biraz daha yardım edebilir misin? Yapıdaki ikinci tam sayı ile şimdi bir sorunum var. – Knudow
@ user1420534 Lütfen bu yeni sorunla ilgili yeni bir soru gönderin, alakalı görünmüyorlar. –