C结构数组

Bal*_*nia 6 c arrays pointers

我有一个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我不能给出太多细节,结果似乎没有一个模式.该列表用作将内容绘制到屏幕的通用方法,并且具有函数而不是直接设置会在渲染中产生奇怪的问题 - 并且随机 - 但是根本不会产生编译器错误.gdb显示一些整数大于整数,这是我找到的唯一模式.masterlist是另一个struct的全局数组.在此示例中,数据需要转换为结构.根本没有编译器警告或错误.我可以提交更敏感的警告,但我总是得到报告我能想到的任何一般性错误.我将尝试选择的解决方案,这应该足够了.

use*_*313 1

为了简单地设置结构成员,您需要整个结构元素的副本吗?

mystruct List[MAX];
ListNumber = 0;

for(i = 0; i < MAX; i++)
{
 if(conditions_meet)
 {
  List[ListNumber].a = masterlist[i].a;
  ListNumber++;
 }
}
Run Code Online (Sandbox Code Playgroud)

如果您确实需要一个函数,请使用目标内存作为参数,例如:

void setter(mystruct *dest,const mystruct *src)
{
  dest->a = src->a; 
}
for(i = 0; i < MAX; i++)
{
 if(conditions_meet)
 {
  setter( &List[ListNumber], &masterlist[i] );
  ListNumber++;
 }
}
Run Code Online (Sandbox Code Playgroud)