0

クローンによってセグメンテーション違反が発生する

コード:

#define STACKSIZE 16384
int variable ;
using namespace std ;
int do_something(void *) {
    variable = 42;
return 0 ;
}

int main() {
void *child_stack;
variable = 9;
child_stack = (void *) malloc(STACKSIZE);
printf("The variable was %d\n", variable);
clone(do_something, child_stack,CLONE_VM|CLONE_FILES,NULL );
sleep(1);
printf("The variable is now %d\n", variable);
free(child_stack);
return 0;
}
4

1 に答える 1

3

のマニュアルページをclone読んでください:

Linux を実行するすべてのプロセッサ (HP PA プロセッサを除く) では、スタックが下向きに成長するため、child_stack は通常、子スタック用に設定されたメモリ空間の最上位アドレスを指します。

だから私はこのようなことを試してみます:

char* child_stack = (char*) malloc(STACKSIZE);
child_stack += STACKSIZE - 1;  // set it to the topmost address
                               // of allocated space

clone(do_something, (void*) child_stack, CLONE_VM|CLONE_FILES, NULL);
于 2012-09-15T13:22:39.603 に答える