C#创建指向stackalloc缓冲区的指针数组及类型报错解决
C# stackalloc指针数组赋值报错问题解决
问题场景
需要创建存储4个独立指针的数组,每个指针分别指向通过stackalloc分配的独立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
相关产品推荐
相关产品推荐

