[英]C code passing struct into function Stack overflow
好的,我目前的工作分配存在问题(相信我,这是其中的一个小部分),因为我们需要用C代码而不是C ++编写,并且我们不允许更改某些代码部分。 所以我定义了一个结构:
typedef struct someStruct {
int what;
int something[MAX];
int another[MAX];
} someType;
在main()中,我在定义的结构中初始化所有值:
someType whatever, *whatptr;
编辑:当然设置指向结构的指针,试图简化示例代码它已经存在于我的代码中
whatptr = &whatever;
whatever.what = 0;
// initialize both arrays to hold 0 at all indexes
// Then I must call a function progRun()
progRun(); //I need to pass struct 'whatever' in some way
现在,progRun()如下所示:
void progRun(){
printWhat(&whatever);
if (whatever.what == 0) {
//do stuff
}
}
除了在progRun()函数中传递哪些参数外,我无法更改此代码内的任何内容,并且可以在printWhat()之前添加内容。 我尝试将progRun更改为
void progRun(someType *stptr)
然后在主叫它
progRun(whatptr);
但这由于某种原因导致了堆栈溢出问题,我尝试使用调试器逐步解决,并且仅在调用函数时发生。 有没有更好的方法可以将“ whatever”结构传递给函数,以便可以将其传递给progRun()和printWhat()并可以访问“ whatever.what”?
任何帮助将不胜感激! 同时,如果可以的话,我会尝试自己解决。
编辑:即使在添加了此代码之前,其他所有内容都已编译并运行得很好,但代码中的其他内容肯定是错误的。 如果我可以分解代码并找出问题所在,则将更新该问题。 而且不行,我无法发布整个代码,因为这是一个任务(这不是任务的目标,相信我它专注于数据转发等等,只需要使此基本功能正常工作即可)谢谢大家的帮助。
编辑:结构中用于某[MAX]和另一个[MAX]的MAX数非常大(我离开桌面时回到家中开始了该项目,我目前使用的是旧笔记本电脑,无法处理较大的数据数组)。 下面的所有答案以及我之前使用过的一些东西现在都可以正常工作。
void progRun(someStruct *ptr) {
someStruct whatever2 = *ptr;
printWhat(whatever2);
if (whatever2.what == 0) { ...
}
whatptr = &whatever;
progRun(whatptr);
您的问题是:
你需要一个指针传递给whatever
,但你传递一个变量( whatptr
是有绝对无关) whatever
。
您需要先将指针分配给指针变量中的任何内容。
您没有在函数中取消引用指针
或者,摆脱指针变量:
void progRun(someType *stptr) {
printWhat(*stptr);
if (stptr->what == 0) { ...
}
progRun(&whatever);
指令
someType whatever, *whatptr;
是问题所在:
*whatptr
不会指向struct
whatever
,除非你做的任务如下:
whatptr = &whatever;
另外,您可以动态地分配在堆上的一个指针,你的记忆struct
whatever
使用malloc()
函数并传递malloc返回给函数指针progrun
:
whatptr = (someType*) malloc ( sizeof(someType) );
if (whatptr == NULL) exit (1);
//whatever you need to do with your code
progrun(whatptr); // call function like this
当然,在这种情况下,您将需要使用箭头->
运算符来取消引用指针以访问struct
的成员元素:
whatpr->what = 0; // for example
另外,请查看这些教程以了解这两种方法:
如果您不能更改print
和if
语句,则应向函数传递struct
的副本:
void progRun( someType whatever ){ // <---Passing by copy
printWhat(&whatever);
if (whatever.what == 0) {
//do stuff
}
}
在main()
您应该像这样调用函数:
someType whatever;
//assign values to members of the struct
progRun(whatever);
并且根本不需要定义和分配指向struct
的指针。
尽管通过复制将变量传递给函数(尤其是当它们是由许多变量(例如struct
)组成的对象)不是一个好习惯:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.