【发布时间】:2018-07-22 04:00:18
【问题描述】:
我有以下两种结构。
struct string_counter {
char *string;
int count;
};
struct container{
struct string_counter *counters;
int size;
};
还有以下功能。
void add_string(struct *container, char *string){
struct string_counter *counter_ptr;
counter_ptr = new_count(string);
container->size++;
container->counters = realloc(container->counters, sizeof(struct string_counter)*container->size);
container->counters[container->size-1] = *counter_ptr;
print_string_counter(&container->counters[container->size-1]);
}
struct counter *new_count(char *string){
struct string_counter *counter_ptr;
counter_ptr = malloc(sizeof(struct string_counter));
counter_ptr->string = string;
counter_ptr->count = 1;
return counter_ptr;
}
在我的主函数中,我每次都使用相同的容器指针和不同的字符串循环调用add_string(container_ptr, string),尝试将新字符串添加到string_counter *counters 的末尾。稍后在我的代码中,当我尝试使用以下两个函数打印计数器的内容时:
void print_container(struct container *container_ptr){
int i;
for(i = 0; i < container_ptr->size; i++){
print_string_counter(&container_ptr->counters[i]);
}
}
void print_string_counter(struct string_counter *counter_ptr){
printf("%s : %d\n", counter_ptr->string, counter_ptr->count);
}
我得到非常不正确的结果,例如下面的输出。但早些时候当我打印时:
print_string_counter(&container->counters[container->size-1])
就在下面:
container->counters[container->size-1] = *counter_ptr;
在我的add_string() 函数中,我得到了正确的结果。
最初我的容器值是
struct_counter = NULL;
int size = 0;
为什么我后来使用循环的输出与我打印时的输出不同?
【问题讨论】:
-
试试
counter_ptr->string = string;-->counter_ptr->string = strdup(string); -
那些是你得到的一些很酷的角色......
-
将
counter_ptr->string = string;更改为counter_ptr->string = strdup(string);会给我一个分段错误。我还尝试将其更改为strcpy(counter_ptr->string, string);,这也给了我一个分段错误。 -
我认为你混淆了 new_struct 中 struct counter 与 struct string_container 的返回,以及 sizeof 名称。你能打开更多的编译器警告来捕捉这些问题吗?我认为这是最重要的。
-
抱歉,我发布的代码不是我正在运行的确切代码,我从笔记本电脑在我的桌面上重写了它,我修复了
sizeof()问题,但输出仍然存在。但是我注意到最后两个输出 7 和 8 始终具有相同的输出,而其他 7 似乎每次都在变化。
标签: c function pointers struct malloc