コンパイル時に引数の数が不明な関数を呼び出す必要があるプロジェクトでインラインアセンブリを大量に使用し、Linuxで動作させるために自分自身を管理している間(Windowsではその問題が発生したことを思い出せません)このような奇妙なことが起こります:
私が何かを持っているなら
for(int i = 1; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
できます。
私が持っている場合
for(int i = this->someVar; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
そして私は、someVarがセグメンテーション違反をスローする値1を保持していることを私の人生で保証します。
また、私が持っている場合
int x = 1;
for(int i = x; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
それは動作しますが
int x = this->someVar;
for(int i = x; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
ではない。
また、不思議なことに、一部の関数では問題がない一方で、他の関数ではすべて同じオブジェクトで問題が発生していると言えます。
誰かが私にそこの問題を解決することができるいくつかの情報を指摘することができれば、私は感謝します。
私は実際にforループで引数をプッシュする必要があるので、それを回避することはオプションではないことに注意してください。
インラインアセンブリワード「volatile」も使用してみましたが、何も変わりませんでした。