Ошибка сегментации после назначения указателя на определенный адрес памяти и изменения его значения - PullRequest
0 голосов
/ 18 декабря 2018

Хорошо, у меня есть рабочая программа, которая читает внешнюю виртуальную память в Linux.Это то, что я хочу сделать: программа 1 выполняется и имеет определенные адреса в памяти для связи с программой 2. Я знаю, что программа 2, которая читает и записывает значения в программу 1 и из нее, работает, я застрял в созданииПрограмма 2, у меня есть этот код:

#include <iostream>
using namespace std;
int main()
{
  int* i;
  i = (int*)0x7ffABCDDCBA1;
  *i = 1;
  cout << *i << " " << i << endl;
}

Примечание:

это всего лишь тестовый код, чтобы увидеть, работает ли он (не работает)

Программа1 будетпрочитайте 0x7ffABCDDCBA1 в pid программы 2, она прекрасно компилируется, но при выполнении я получаю "Ошибка сегментации"

Примечание:

#include <iostream>
using namespace std;
int main()
{
  int* i;
  i = (int*)0x7ffABCDDCBA1;
  cout << i << endl;
}

Работает просто отлично

1 Ответ

0 голосов
/ 18 декабря 2018

Вы обращаетесь к некоторой случайной ячейке памяти, которая, скорее всего, не принадлежит вашему адресному пространству процесса и поэтому вызывает неопределенное поведение.

Вам следует использовать общую память между процессами: Как использовать общую памятьв Linux .

Есть несколько других методов, но этот наиболее широко используется для этой цели.

...