【发布时间】:2019-09-09 08:51:58
【问题描述】:
我将结构传递给函数。该结构包含一个指针变量。结构本身作为指针变量传递给函数。我无法使用访问数组的下标样式(var [0])访问结构的指针变量成员(在函数内部)。代码可以编译,但在执行 .o 文件时出现分段错误。错误出在函数代码的第一行。我无法访问结构内的指针变量。
当不涉及函数时,我可以使用点运算符轻松访问此指针变量。例如,看最后的工作代码。
有问题的代码:
#include<stdio.h>
struct prog
{
double* var;
char* name;
int arr[];
};
typedef struct prog p;
void fun(p *inp);
int main()
{
p in;
p *inptr = ∈
in.arr[1] = 32;
fun(inptr);
printf("Value var is: %f\n", in.var[0]);
printf("Value arr[0] is: %d\n", in.arr[0]);
printf("Value arr[1] is: %d\n", in.arr[1]);
printf("Name of prog is: %s\n", in.name);
return 0;
}
//Function
void fun(p *inp)
{
(*inp).var[0] = 4.5;
//inp->var[0] = 4.5;
inp->arr[0] = 11;
inp->arr[1] = 55;
inp->name = "User";
}
工作代码:
#include<stdio.h>
struct prog
{
double* var;
char* name;
int arr[];
};
void main()
{
struct prog p;
p.var[0] = 3.7;
p.name = "User";
p.arr[0] = 100;
p.arr[1] = 30;
printf("Value var is: %f\n", p.var[0]);
printf("size of prog is: %d bytes \n", sizeof(p));
printf("Value at arr[0] is: %d\n", p.arr[0]);
printf("Value at arr[1] is: %d\n", p.arr[1]);
printf("Name of prog is: %s\n", p.name);
}
运行 'gdb' 说“程序收到信号 SIGSEGV,分段错误。 0x00005555555551d3 in fun (in=0x7ffffffffe200) at strct-fun.c:35 35 (*inp).var[0] = 4.5;"
【问题讨论】:
-
您没有为任何指针或数组分配内存。
-
@hacks :如果是这样,那么为什么标记的“工作代码”应该起作用?我正在尝试将其扩展到函数。您可以将它作为 C 代码运行吗?感谢您的回复方式。
标签: c function pointers struct