Я делаю очень простой IP C между двумя приложениями на Raspberry Pi в Linux, когда одно приложение отправляет, а другое получает
Во время ночного запуска процесс завершился с SIGSEGV
ошибка.
При отправке приложения произошел сбой strcpy(str, in_string);
Что вызвало бы этот тип cra sh?
Строки, которые я записываю в память, имеют одинаковый размер, и я предполагаю, что он всегда записывает в одну и ту же ячейку памяти, но я знаю, linux использует виртуальную память, поэтому физический адрес может смещаться.
#pragma once
#include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
class LocalSocket {
public:
LocalSocket()
{ // ftok to generate unique key
key_t key = ftok("shmfile", 65);
// shmget returns an identifier in shmid
shmid = shmget(key, 1024, 0666 | IPC_CREAT);
// shmat to attach to shared memory
str = (char*) shmat(shmid, (void*)0, 0);
}
~LocalSocket()
{
//detach from shared memory
shmdt(str);
// destroy the shared memory
shmctl(shmid, IPC_RMID, NULL);
}
int shmid;
char *str;
bool Send(char* in_string)
{
strcpy(str, in_string);
printf("Data written in memory: %s\n", str);
return true;
}
bool Receive(char* out_string)
{
printf("Data read from memory: %s\n", str);
strcpy(out_string, str);
return true;
}
};