-
28-10-2019 - |
質問
私はブーストを使用しようとし、サイズ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);
所属していません StackOverflow