インスタンスを作成し、std:vector 型のプライベート メンバー変数にデータを格納する静的ファクトリ メソッド Foo::createOne を持つクラス Foo があります。Foo::createOne を呼び出すと、プログラムが次の例外をスローします: "EXC_BAD_ACCESS (メモリにアクセスできませんでした)"
コードは次のとおりです。
フー。
#include <vector>
class Foo {
public:
Foo();
Foo(const Foo& orig);
virtual ~Foo();
static Foo * createOne();
private:
std::vector<int> v;
};
Foo.cpp
#include "Foo.h"
Foo::Foo() {
};
Foo::Foo(const Foo& orig) {
};
Foo::~Foo() {
};
Foo * Foo::createOne() {
Foo *f;
f->v.push_back(5);
return f;
}
main.cpp
#include <iostream>
#include "Foo.h"
int main(int argc, char** argv) {
std::cout << "Testing createOne." << std::endl;
Foo *myFoo = Foo::createOne();
std::cout << "It worked." << std::endl;
}
1つの問題を修正...
答えてくれてありがとう。初期化されていないポインターの問題を修正しました (下記)。現在、「ローカル変数 'f' のアドレスが返されました」というコンパイラ警告が表示されます。
Foo * Foo::createOne() {
Foo f;
f.v.push_back(5);
return &f;
}