我一直在嘗試這個好幾個小時,而谷歌所有的東西我都會想到,但我要瘋了。共享內存段內的指針
我有一個結構:
typedef struct {
int rows;
int collumns;
int* mat;
char* IDs_row;
} mem;
我不知道INT *(基質)的尺寸與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和collumns賦值,並將0賦值給所有的矩陣。
但是在那之後,我在char *和bam中寫了一些分段錯誤。
調試程序我看到指針,mat和IDs_row都是null。我如何在共享內存段中給他們正確的值?
我嘗試刪除char *指針,只是爲了試一試,然後分段錯誤錯誤是在連接到所述共享內存的其他程序中,只是檢查矩陣內的值(檢查 - >行和 - > collumns是succesfull)
謝謝!我從來沒有想過爲每個指針做shmget。 (我甚至不知道它是如何工作的,做同樣的調用,但「鑄造」它) 現在有一個結構中的第二個整數,「collumns」的問題。我在一個進程中放置了一個「1」,另一個進程將其讀取爲62045或類似的東西。我試着將sizeof(ctrl)更改爲sizeof(men)和2 * sizeof(int)+ sizeof(int *)+ sizeof(char *),但沒有運氣。 – Knudow
對不起,我發送了消息,然後進行了編輯。你能幫我多一點嗎?我現在有一個問題,結構中的第二個整數。 – Knudow
@ user1420534請發佈有關這個新問題的新問題,他們似乎沒有關係。 –