我的代码的目标如下:
通过单指针或双指针返回指向innerStruct
数组的指针(我相信我应该使用双指针)
将该指针传递给修改值
似乎我在在线编译器中遇到了一个seg错误。
#include <stdio.h>
typedef struct
{
int innerVal;
} innerStruct;
typedef struct
{
int a;
innerStruct * inner[3];
} myStruct;
static myStruct * m1;
innerStruct ** getInnerPtrToArray()
{
return &(m1->inner);
}
void processInnerStruct(innerStruct * array_ptr[])
{
for(int i=0; i<3; i++)
{
array_ptr[i]->innerVal = i;
}
}
int main()
{
innerStruct ** array_ptr = getInnerPtrToArray();
processInnerStruct(array_ptr);
return 0;
}
答案 0 :(得分:1)
由于inner
是一个指针数组,因此需要为它们指定内存以指向它们。您还需要为m1
分配内存以指向。
int main()
{
m1 = malloc(sizeof(myStruct));
for (int i = 0; i < 3; i++) {
m1->inner[i] = malloc(sizeof(innerStruct));
}
innerStruct ** array_ptr = getInnerPtrToArray();
processInnerStruct(array_ptr);
return 0;
}
答案 1 :(得分:1)
这是你正在做的第二次削减。您也可以将myStruct
更改为仅包含innerStruct
数组,而不是指向innerStruct
的指针数组,而不是分配。然后不需要分配,例如
#define NINNER 3 /* if you need a constant, define one */
...
typedef struct {
int a;
innerStruct inner[NINNER]; /* you are not allocating */
} myStruct;
注意:避免使用全局变量,不需要它们。在main()
中声明变量并根据需要传递参数。
完全放入,根据需要调整类型,并在下面添加注释作为评论,您可以执行以下操作:
#include <stdio.h>
#define NINNER 3 /* if you need a constant, define one */
typedef struct {
int innerVal;
} innerStruct;
typedef struct {
int a;
innerStruct inner[NINNER]; /* you are not allocating */
} myStruct;
/* takes pointer to m1, returns address of array of 3 innerStruct */
innerStruct *getInnerPtrToArray (myStruct *innerptr)
{
return innerptr->inner;
}
/* takes pointer to array of innerStruct, fills */
void processInnerStruct (innerStruct *array_ptr)
{
for (int i = 0; i < NINNER; i++)
array_ptr[i].innerVal = i;
}
int main (void) {
myStruct m1 = { .a = 10 }; /* don't use globals */
/* pass the address of m1 */
innerStruct *array_ptr = getInnerPtrToArray (&m1);
processInnerStruct (array_ptr);
printf ("m1.a: %d\n", m1.a); /* output values */
for (int i = 0; i < NINNER; i++)
printf (" .inner[%d]: %d\n", i, m1.inner[i].innerVal);
return 0;
}
示例使用/输出
$ ./bin/inner
m1.a: 10
.inner[0]: 0
.inner[1]: 1
.inner[2]: 2
由您决定是否打算为3
中的每个innerStruct
myStruct
分配,而是根据我对您尝试做的内容的分析,并且不包括stdlib.h
,看来你的意图是在没有分配的情况下处理数组。如果您还有其他问题,请与我们联系。