MLA*_*LAC 2 c arrays function variable-length-array
我试着编写一个返回像素颜色的随机数组的函数,所以当我调用时randomPalette(i),该函数将创建一个随机i颜色数组.以下是我的代码.它表示random[colors]该表达式的错误必须具有恒定值.我不知道为什么.怎么解决?
pixel* randomPalette(int colors){
pixel random[colors] ;
int i, x;
srand(time(NULL)); //generate a random seed
for (i = 0; i < colors; i++){
x = rand() % 256;
random[i].r = x; random[i].g = x; random[i].b = x;
}
return random;
}
Run Code Online (Sandbox Code Playgroud)
在您的代码中,首先
pixel random[colors] ;
Run Code Online (Sandbox Code Playgroud)
语法称为可变长度数组,也称为VLA,仅支持一次又一次C99.如果你希望这个工作,你需要强制你的编译器使用C99模式,比如gcc,你需要使用--std=C99编译器选项.
其次,random是一个自动局部变量,你正试图return(它的地址).如果正在使用返回的值,则将调用未定义的行为.
解决方案:使用指针和动态内存分配,如malloc()和家人一样.动态分配的内存生存期保持活动状态,直到通过调用手动释放free(),因此您可以从函数返回指针并在调用者中使用它.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |