我想使用结构传递几个变量。以下是示例程序代码。当我运行这个程序时,出现段错误。我使用 gcc 编译器。
谁能帮我解决这个问题?
struct data{
const char * ip;
const char * address;
const char * name;
};
int fun(struct data *arg) {
//struct data *all;
const char *name = arg->name;
printf("\n My name is:%s",name);
return 1;
}
int main(int argc, char * const argv[]) {
struct data * all;
int k=0;
//data.name = argv[1];
all->name=argv[1];
k = fun(all);
printf("\n k is:%d ",k);
return 0;
}
最佳答案
问题出在这里:
struct data * all;
all->name=argv[1];
您还没有为all
分配内存。当您有一个未初始化的指针时,它指向内存中的随机位置,您可能无法访问这些位置。您有两个选择:
在栈上分配:
struct data all; all.name=argv[1]; k = fun(&all);
在堆上分配:
struct data *all = malloc(sizeof(*all)); if (all != NULL) { all->name=argv[1]; k = fun(all); } free(all);
当您知道 all
仅在当前函数(以及您调用的函数)中需要时,第一种情况很好。因此,在堆栈上分配它就足够了。
第二种情况适用于当您在创建它的函数之外需要 all
时,例如当您返回它时。想象一个函数初始化 all
并将它返回给其他人使用。在这种情况下,您不能在堆栈上分配它,因为它会在函数返回后被销毁。
您可以在 this question 中阅读更多相关信息.
关于c - 使用结构传输变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11538597/