如何避免我的锚程序抛出"Access violation in stack frame"?



My Anchor程序有一个指令结构,如下所示:

#[derive(Accounts)]
pub struct MyInstruction<'info> {
pub my_account: Account<'info, MyAccount>,
// ...
}
#[account]
pub struct MyAccount {
// ... Many different fields
}

当我尝试运行使用该结构的指令时,我会得到一个奇怪的堆栈错误,如下所示:

Program failed to complete: Access violation in stack frame 3 at address 0x200003fe0 of size 8 by instruction #28386

什么东西?

Anchor默认情况下会将您的帐户放入堆栈中。但是,很可能是因为你的账户很大,或者你有很多账户,所以你的账户空间不足。

如果你在上面的日志中查看,你可能会出现如下错误:

Stack offset of -4128 exceeded max offset of -4096 by 32 bytes, please minimize large stack variables

为了解决这个问题,你可以尝试Box处理你的帐户结构,将它们移动到堆中:

#[derive(Accounts)]
pub struct MyInstruction<'info> {
// Note the Box<>! 
pub my_account: Box<Account<'info, MyAccount>>,
}

相关内容

  • 没有找到相关文章

最新更新