没有获得指定内存的实际大小

时间:2015-12-20 11:41:42

标签: c pointers memory-management malloc sizeof

我正在尝试为100个整数分配空间。但最终得到2并没有线索为什么!我尝试了Exception in Tkinter callback Traceback (most recent call last): File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__ return self.func(*args) File "C:\Users\filippo\Desktop\Win32.py", line 5, in Cursor win32api.SetCursorPos(10,10) TypeError: SetCursorPos() takes exactly 1 argument (2 given) malloc(),但理解上没有区别。

代码:

calloc

输出:

#define MAX 100

    int *arr = (int *)calloc(MAX, sizeof(int)); //same with malloc(MAX * sizeof(int))

    printf("MAIN before memset: %d | %d\n",
    (int)(sizeof(arr)/sizeof(arr[0])), (int)(sizeof(arr)));

    if(!arr) {
            fprintf(stderr, "A malloc error occured.\n");
            exit(1);
    }
    memset (arr, 0, MAX);
    printf("MAIN: %d\n", (int)(sizeof(arr)/sizeof(arr[0])));

我缺少什么?我只想分配一个数组/指针到100个整数。

1 个答案:

答案 0 :(得分:2)

在你的代码中,arr是一个指针,在指针上使用sizeof可以得到指针的大小,而不是分配给该指针的内存量。

在您的情况下,sizeof(arr)为您提供int *的大小,sizeof(arr[0])根据您的平台和编译器为您提供int的大小。

也就是说,你不能直接从指针本身获取已分配内存的大小,你需要自己跟踪它。