Что меняется при вызове метода копии? - PullRequest
0 голосов
/ 04 мая 2020

Я получаю segfault при вызове функции-члена класса из другой его функции-члена. Вот упрощенная версия:

struct X {
  // data members, constructor here
  float g() { 
    // some math here
    return result;
  }
  float f() {
    return g() + 1;
  }
}

По какой-то причине, когда f вызывает g, я получаю segfault, а g даже не выполняется. Однако странным решением является приведение this к его типу и разыменованию и его использование. Что-то вроде:

struct X {
  // same old stuff
  float f() {
    X th_is = *((X *)this);
    return th_is.g() + 1;
  }

По какой-то причине это работает. Очевидно, я опускаю фон для рабочего примера, так как система очень сложна, и эта ошибка может быть вызвана несколькими факторами ...

Что я могу сделать из того факта, что первый не работает, а второй работает?

Обратите внимание, что все остальные методы можно вызывать сами по себе. Просто когда один вызывает другого, я получаю ошибку сегментации.

...