Tôi đã thử điều này hàng giờ đồng hồ, và google tất cả những điều tôi nghĩ đến, nhưng tôi sẽ phát điên.Con trỏ bên trong phân khúc bộ nhớ chia sẻ
Tôi có một struct:
typedef struct {
int rows;
int collumns;
int* mat;
char* IDs_row;
} mem;
Tôi không biết các kích thước của int * (một ma trận) và char * cho đến khi sau này.
Khi tôi làm, tôi có thể tạo bộ nhớ chia sẻ như thế này:
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);
}
Không có vấn đề ở đây. Sau đó, tôi đưa ra một giá trị cho ctrl-> hàng và collumns, và gán 0 cho tất cả các ma trận.
Nhưng sau đó, tôi viết một thứ gì đó trong lỗi * và bam phân đoạn.
Gỡ lỗi chương trình Tôi thấy rằng cả hai con trỏ, mat và IDs_row trong đó null. Làm thế nào để cung cấp cho họ các giá trị chính xác bên trong phân khúc bộ nhớ chia sẻ?
Tôi đã thử xóa con trỏ char *, chỉ để thử, sau đó lỗi lỗi phân đoạn nằm trong chương trình khác kết nối với bộ nhớ dùng chung và chỉ kiểm tra các giá trị bên trong ma trận (kiểm tra -> hàng và -> collumns là succesfull)
Cảm ơn bạn! Tôi đã không bao giờ nghĩ đến việc làm shmget cho mỗi con trỏ. (Tôi thậm chí không hiểu làm thế nào mà hoạt động, làm cuộc gọi tương tự nhưng "đúc" nó) Bây giờ có một vấn đề với số nguyên thứ hai trong cấu trúc, "collumns". Tôi đặt một "1" trong một quá trình, và quá trình khác đọc nó là 62045 hoặc một cái gì đó như thế. Tôi đã thử thay đổi sizeof (ctrl) để sizeof (nam) và 2 * sizeof (int) + sizeof (int *) + sizeof (char *), nhưng không may mắn. – Knudow
Xin lỗi, tôi đã gửi tin nhắn và sau đó chỉnh sửa nó. Bạn có thể giúp tôi nhiều hơn một chút không? Tôi có một vấn đề bây giờ với số nguyên thứ hai trong cấu trúc. – Knudow
@ user1420534 xin vui lòng gửi một câu hỏi mới với vấn đề mới này, họ không có vẻ liên quan. –