C整数和打印的内存分配问题

时间:2017-02-04 18:03:50

标签: c memory-management

我有一个名为' data'的数据类型这是一个无效指针。它被用作另一个函数的参数,这允许程序员将任何数据类型作为参数发送到该特定函数。

如何组合我的分配,所以我不必使用4个不同的变量,而只使用2个?我在谈论 d,d2,dd和dd2

(OBS!q& q2是堆栈名称。忽略它们。我唯一的问题是d,d2,dd和dd2。

data d = (int*) malloc(sizeof(int));
*(int *)d = 7;

data d2 = (int*) malloc(sizeof(int));
*(int *)d2 = 7;

data dd = (int*) malloc(sizeof(int));
*(int *)dd = 8;

data dd2 = (int*) malloc(sizeof(int));
*(int *)dd2 = 8;

stack_add(q, d); /* Adds an item so the stack is not empty.*/
stack_add(q2, d2); /* Adds an item so the stack is not empty.*/

if (!stack_isEmpty(q)) {

    /* Removes an item and then adds an item from the first stack*/
    stack_remove(q);
    stack_add(q, dd);

    /* Adds an item and then removes one from the second stack*/
    stack_add(q2, dd2);
    stack_remove(q2);

如何组合分配以使其看起来更好?

1 个答案:

答案 0 :(得分:1)

  1. 您的分配不好,因为

    • 违反DRY原则
    • 您不会检查NULL
    • 尺寸参数不好,应为sizeof(*d)。它可能还可以,但因为你没有发布data是什么。
  2. 您似乎有typedef指针,这是不好的做法。

  3. 您应该发布stack_firstvalue()的代码,因为它可能存在问题所在。

  4. 简单来说,您发布的代码中存在非常明显的错误,并且您没有发布stack_firstvalue()的有趣代码,因此可以自然地认为它会包含错误