【问题标题】:Am I using malloc wrong in this snippet [duplicate]我在这个片段中使用 malloc 错误吗[重复]
【发布时间】:2019-05-17 05:18:31
【问题描述】:

我试图理解 malloc,所以我创建了这个小东西,以显示整数的大小,以及 malloc 给出的新大小,但它并没有增加;对我来说总是 8 个字节

那么,我使用 malloc 是不是错了?

#include <stdio.h>
#include <stdlib.h>

int main() {

    int *points = (int *) malloc(10*sizeof(int));
    int size_of_points = sizeof(points);
    int size_of_int = sizeof(int);

    printf("size of int: %d\n", size_of_int);
    printf("size of points: %d\n\n", size_of_points);

    for ( int counter = 0; counter < size_of_points; counter++) {
        printf("Please enter: ");
        scanf("%d", points);

        printf("**New size of int: %d\n**", size_of_int);
        printf("New size of points: %d\n\n**", size_of_points);
    }

    free(points);

    return 0;
}

在任何时候,点的大小都不应该是:sizeof(int) 是 8 乘以 10 = 40? 它以 8 个输入停止。

【问题讨论】:

  • 没有。它是指针的大小。还有为什么size_of_points 应该改变?您应该阅读 C 的基础知识。
  • 请注意,循环不会更改 size_of_intsize_of_points。您将指向分配数组的第零个元素的指针传递给scanf(),它会用您键入的任何整数覆盖变量(假设您键入一个整数);你永远不会改变分配的内存量。
  • 好吧,我知道了,但理论上如果我想以点为单位存储超过 8 个输入,我是否必须使用缓冲区而不是 malloc,点 [200] 还是重新分配更好,所以每次没有空间时,如果需要,添加一个额外的空间

标签: c list malloc user-input sizeof


【解决方案1】:

您的代码没有问题。但是,您的理解是错误的:sizeof(some_pointer) 始终返回指针的大小,而不是指向的内存块的大小。指针中没有内存块大小信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2020-11-29
    • 2014-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多