【发布时间】:2018-03-11 16:04:35
【问题描述】:
我对 C 编程还是很陌生,并且还在学习这门语言。我正在尝试执行以下操作(它是我初始程序代码的缩小版本)。但是每次我尝试初始化counter 时,程序都会崩溃。我尝试设置另一个函数来处理初始化过程,将counter 设置为在set_members 函数中递增,并尝试通过将总计&total 的地址传递给计数器来初始化计数器。但是每次我尝试运行我的程序时,它都会在打印"Hello" 后崩溃。我想我正在尝试错误地初始化counter,因为我不完全理解C 中的pointers 和structs。有人可以解释我的初始化过程如何或为什么不正确,并导致我的程序崩溃吗?以及我如何才能正确地做到这一点?谢谢!
typedef struct CharStruct{
char *names;
}CharStruct;
typedef struct Count{
CharStruct *arr;
int counter;
}Count;
typedef struct Members{
Count *member;
}Members;
typedef struct Test{
Members people;
}Test;
void set_members(struct Test *person);
void print_total(struct Test *person);
int main(void) {
printf("Hello\n"); /* prints Hello */
Test person;
//person.people.member->counter = 0;
set_members(&person);
print_total(&person);
system("pause");
return EXIT_SUCCESS;
}
void set_members(struct Test *person)
{
int total = 0;
while(total < 10)
{
++total;
}
person->people.member->counter = total;
}
void print_total(struct Test *person)
{
printf("Total Members: %d\n", person->people.member->counter);
}
【问题讨论】:
-
您没有为成员分配内存。 Member 是一个指针,这个指针指向一些当时不适合你的内存,你需要使用 malloc 分配内存,然后再使用它。 person->people.member = malloc(sizeof(Count));
-
我不明白
set_members中的while循环的含义,你为什么要这样做? -
我也不懂你的结构,你用这些结构建模什么样的数据?
Test包含Members结构,Members包含指向Count的指针,其中包含CharStruct的指针?你想解决什么问题?
标签: c pointers memory-management struct malloc