【问题标题】:Stack Push function only works when debuggingStack Push 功能仅在调试时有效
【发布时间】:2020-03-09 05:09:18
【问题描述】:

我的推送功能有问题。这是堆栈结构的简单推送功能,但大多数时候不起作用。它仅在调试时有效。 这是函数:

tError favoriteStack_push(tFavoriteStack *stack, tFavorite favorite) {
    //assert(stack!=NULL);

    tFavoriteStackNode* tmp;

    //mem_allocation of new node
    tmp=(tFavoriteStackNode*)malloc(sizeof(tmp));

    if(tmp==NULL)
        return ERR_MEMORY_ERROR;

    //copying element to new node
    tmp->e=favorite;

    //pointing next to previous first element
    tmp->next=stack->first;

    //new node is the new first node
    stack->first=tmp;

    return OK;

}

我看不到错误。 我将不胜感激。

谢谢

【问题讨论】:

    标签: c dynamic stack malloc


    【解决方案1】:

    sizeof(tmp) 将返回指针的大小,而不是对象的大小,可能是sizeof(*tmp),但我认为最好的是

    tmp=(tFavoriteStackNode*)malloc(sizeof(tFavoriteStackNode));

    【讨论】:

    • 就是这样。是 sizeof(*tmp) 而不是 sizeof(tmp)。非常感谢!!
    • 我的意思是tmp=(tFavoriteStackNode*)malloc(sizeof(tmp));应该变成tmp=(tFavoriteStackNode*)malloc(sizeof(tFavoriteStackNode));
    • 一般推荐使用tmp=malloc(sizeof(*tmp)); 形式(无强制转换)。见stackoverflow.com/questions/605845/…
    • 人们推荐sizeof(*tmp),因为你不必写两次类型。但是你必须写两次变量名。
    • @user253751 如果你在初始化中mallocing 并不重要:t *p = malloc(sizeof(t));,其中左侧的类型和 sizeof 中的类型彼此相邻=> 很容易验证t 匹配sizeof(t)。但是您也可以有t *p; /*...code...*/ p = malloc(sizeof(t)),然后如果声明更改为t1 *pmalloc 调用将是错误的,并且该错误可能不容易发现。 t *p; /*...code...*/ p = malloc(sizeof(*p)); 不会有这个问题。
    猜你喜欢
    • 2012-05-26
    • 2018-11-10
    • 2017-01-30
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2016-10-09
    • 2019-11-02
    相关资源
    最近更新 更多