繁体   English   中英

初始化结构并在函数中分配其参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM