You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#创建指向stackalloc缓冲区的指针数组及类型报错解决

C# stackalloc指针数组赋值报错问题解决

问题场景

需要创建存储4个独立指针的数组,每个指针分别指向通过stackalloc分配的独立float类型缓冲区,编译时触发错误:「无法将类型转换为float*」。
错误代码如下:

float*[] auBuffers = new float*[4];
for ( int i = 0 ; i < auBuffers.Length ; i++ ) {
    auBuffers[i] = stackalloc float[256];
}

原因说明

这是C#的stackalloc表达式类型推断规则导致的:当stackalloc结果直接赋值给数组元素这类没有显式声明指针类型的左值时,编译器会默认将stackalloc T[N]推断为Span<T>类型,而非T*指针,因此会触发类型不匹配错误。

解决方法

先将stackalloc分配的地址赋值给显式声明的指针类型临时变量,再存入数组即可。此时编译器会明确将stackalloc的返回值推断为指针类型,不会出现类型转换错误。
解决代码如下:

float*[] auBuffers = new float*[4];
for ( int i = 0 ; i < auBuffers.Length ; i++ ) {
    float* tempau = stackalloc float[256];
    auBuffers[i] = tempau;
}

内容的提问来源于stack exchange,提问作者Confused

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:45:07