[英]C: Initializing a struct and assigning it to pointer in function parameter
[英]Initializing a struct and assigning it's parameters within a function
我已经进行了一些搜索,似乎无法找到我的问题的确切答案。 似乎应该可以,但不能。 这是我的代码:
typedef struct stack_strut {
Item* top;
int size;
}stack;
void initialize(stack* s) {
s = (stack*)malloc(sizeof(stack));
s->size = 0;
}
int main() {
stack s;
initialize(&s);
return 0;
}
那显然是精简版。 我的印象是,由于传递了指向该结构的指针,因此我能够修改该结构的内容,因此该函数内部的make更改应在返回后保留。 如果我在initialize函数内使用一条print语句检查大小,则成功打印0。但是,如果在initialize返回后立即在main中使用另一个print语句,则s的大小现在是一个非常大的数字。 是因为我没有在函数外部初始化s吗? 我必须保持这种格式,因为我的教授提供的主要功能以相同的方式启动:
stack s;
initialize(&s);
问题是当您编写s = (struct*)malloc(sizeof(strucy));
它会覆盖指向s的指针,并且您不会初始化“ good”对象。 您创建了另一个,并对其进行了初始化(内存已泄漏)。 您可以通过打印以下值来检查
不需要malloc,堆栈已在main中分配
#include <iostream>
struct Item {
int nodeId;
};
struct stack {
Item* top;
int size;
};
void initialize(stack *s)
{
std::cout << "initialize 1. stack at " << s << std::endl;
s = (stack*)malloc (sizeof(stack));
std::cout << "initialize 2. stack at " << s << std::endl;
s->size = 0;
}
int main() {
stack s;
std::cout << "main 1. stack at " << &s << std::endl;
initialize(&s);
std::cout << "main 2. stack at " << &s << std::endl;
return 0;
}
将输出(请参阅初始化2。)
main 1. stack at 0x7ffca7c72520
initialize 1. stack at 0x7ffca7c72520
initialize 2. stack at 0x5566830b0280
main 2. stack at 0x7ffca7c72520
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.