即時嘗試實現一個基本程序,它將字符串數組寫入共享內存然後從中讀取它。我一直在分段故障。我真的不知道什麼是錯的(我真的搞砸了),因爲我第一次使用共享內存。任何幫助將不勝感激,謝謝!分割錯誤:試圖在共享內存中寫入字符串數組c
代碼:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char *argv[])
{
int shmid;
int i = 0;
key_t key = 123;
char (*array)[100][50];
shmid = shmget(key, 100 * 50, IPC_CREAT | 0666);
array = (char *)shmat(shmid, 0, 0);
// array = malloc(sizeof(int)*count);
for (i = 0; i < 10; i++)
{
strcpy(array[i], "arrayvalues");
}
for (i = 0; i < 10; i++)
{
printf("\n%s---\n", array[i]);
}
printf("\nWritting to memory succesful[+]\n");
shmid = shmget(key, 1024, IPC_CREAT | 0666);
array = (char *)shmat(shmid, 0, 0);
for (i = 0; i < 9; i++)
{
printf("\n%s---\n", array[i]);
}
printf("\nRead to memory succesful[+]\n");
shmdt((void *)array);
// shmctl(shmid, IPC_RMID, NULL);
return 0;
}
編輯:它不僅節省了在共享存儲器數組[0]的值。
具有諷刺意味的是,您的名字是segfault。 –
@AjayBrahmakshatriya我在內存管理方面真的很糟糕! :) –
首先檢查* shmget *和* shmat *返回錯誤值(詳細信息請閱讀手冊頁)。返回值是否正確? (一般來說,在缺少基本錯誤檢查的代碼上調試錯誤是沒有意義的。) – hyde