代码之家  ›  专栏  ›  技术社区  ›  dhutturi

malloc()没有分配我期望它[复制]的内容

  •  -1
  • dhutturi  · 技术社区  · 1 年前

    我有两个整数指针, a b 。我使用以下行:

    int* b = malloc(3 * sizeof(int));
    

    我想打电话来 sizeof(b) 返回 3 * sizeof(int) 这等于 12 ,但事实并非如此,它又回来了 8 .

    我想分配以下元素 b ,并在末尾附加了另一个元素。如果就如何分配多个提供建议,我们将不胜感激。

    我的问题总结如下: 为什么是 malloc 显示第一段中描述的行为,以及 如何本质上追加到整数数组

    2 回复  |  直到 1 年前
        1
  •  1
  •   chux - Reinstate Monica    1 年前

    分配b中存在的元素,并附加另一个元素

    // Allocate
    int *a = malloc(4 * sizeof(int)); 
    // or better as 
    int *a = malloc(sizeof a[0] * 4); 
    
    // Copy the data pointed to by `b` to `a`.
    memcpy(a, b, sizeof a[0] * 3);
    
    // Assign.
    a[3] = 42;
    
        2
  •  1
  •   Toby Speight    1 年前

    sizeof 是一个compile-time运算符,它告诉 表达 作为论据给出。在这种情况下 sizeof b sizeof (int*) -在您的平台上,指向int的指针大小显然为8个字符。

    malloc() doesn't provide any interface 查找它分配了多少存储空间,但如果它无法分配请求的数量,则返回一个空指针。若你们的程序需要知道内存块的大小,程序员有责任在变量中记住这一点。