我有一个程序读取游戏中实体的"原始"列表,我打算创建一个数组,其中包含一个不确定数量的实体的索引号(int),用于处理各种事物.我想避免使用太多的内存或CPU来保存这些索引......
到目前为止,我使用的一个快速而肮脏的解决方案是在主处理函数(本地焦点)中声明具有最大游戏实体大小的数组,以及另一个整数来跟踪已添加到列表中的数量.这并不令人满意,因为每个列表都拥有3000多个阵列,这并不是那么多,但感觉就像是浪费,因为我可以使用6-7列表的解决方案来实现不同的功能.
我没有找到任何C(不是C++或C#)特定的解决方案来实现这一目标.我可以使用指针,但我有点害怕使用它们(除非它是唯一可能的方式).
数组不会离开本地函数作用域(它们将被传递给函数,然后被丢弃),以防更改内容.
如果指针是唯一的解决方案,我如何跟踪它们以避免泄漏?
我有一个C(不是C++)结构,就像这样
typedef struct mystruct{
float a,b;
int x, y;
} mystruct;
Run Code Online (Sandbox Code Playgroud)
然后在函数中我收集这样的数据:
mystruct List[MAX];
ListNumber = 0;
for(i = 0; i < MAX; i++)
{
if(conditions_meet)
{
List[ListNumber].a = masterlist[i].a;
Run Code Online (Sandbox Code Playgroud)
...等等
ListNumber++;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我将数组发送到一个函数
DoStuff(static int max, mystruct array[max]){
Stuff
}
Run Code Online (Sandbox Code Playgroud)
这有效,但当我尝试这样做时......
mystruct setter(int i)
{
mystruct TEMP;
TEMP.a = masterlist[i].a;
//......etc
return TEMP;
}
mystruct List[MAX];
ListNumber = 0;
for(i = 0; i < MAX; i++)
{
if(conditions_meet)
{
List[ListNumber] = setter(i);
ListNumber++;
}
}
Run Code Online (Sandbox Code Playgroud)
它会导致很多时髦的错误.为什么会这样?编辑:@ tommieb75我不能给出太多细节,结果似乎没有一个模式.该列表用作将内容绘制到屏幕的通用方法,并且具有函数而不是直接设置会在渲染中产生奇怪的问题 - …