質問

私はブーストを使用しようとし、サイズ24のオブジェクトの3000の割り当ての後にSEGVを使用しました、今私はSYS/IPC.HとSYS/SHM.Hを使用し始めました、私は25 Mioバイトを割り当てます(これを適切に理解している場合)

また、私のLinuxボックスIPCS -Mで適切に動作するようです。

0x000081bc 917516     testUser 644        25000000   0

sysctl -pが印刷されます

kernel.shmmax = 25500000

何らかの理由で、プログラムが「43406 x 24バイト」に達するまで機能します。私の問題があるところにいくつかのヒントを得ることができてうれしいです。また、これがオブジェクトで共有メモリを割り当てて使用する間違った方法であるかどうかに注意してください。

#define MAXMYMEM 25000000
int sharedMemId;
x *p_sharedMemory;
x *p_other;
sharedMemId = shmget(2232, MAXMYMEM, IPC_CREAT | 0644);

if(sharedMemId >= 0){

    p_sharedMemory = (x*) shmat( sharedMemId, 0 , 0);

    if(p_sharedMemory != ( x *)-1) {

        cout << sizeof(x) << endl;

        for(unsigned int i = 0 ; i < 1000000;i++ ){



            (p_sharedMemory + (sizeof(x) * i))->setTest(i);

        }
役に立ちましたか?

解決

(p_sharedMemory + (sizeof(x) * i))->setTest(i);

なぜあなたは使っているのですか sizeof(x) ここ? xを指すポインターに1つを追加すると、次のバイトではなく、次のxを指します。これがあなたの問題だと思います。

変化する (p_sharedMemory + (sizeof(x) * i))->setTest(i);

++p_sharedMemory;
p_sharedMemory->setTest(i);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top