【问题标题】:How to use malloc for initialize a char array in C? [duplicate]如何使用 malloc 在 C 中初始化 char 数组? [复制]
【发布时间】:2021-02-04 02:33:37
【问题描述】:

我尝试使用 malloc 分配一个 char 数组,但大小始终为“8”:

char *d = malloc(2356 << 1);
printf("size of *d: %d\n", sizeof(d));

output: size of *d: 8

char *d = malloc(2356 * sizeof(*d);
printf("size of *d: %d\n", sizeof(d));

output: size of *d: 8

char *d = malloc(2356 * sizeof(char));
printf("size of *d: %d\n", sizeof(d));

size of *d: 8

请帮帮我,我的代码有什么问题?

谢谢!

【问题讨论】:

  • d 不是字符数组,它是指向字符的指针。当您像这样使用 malloc 分配内存时,d 是指向该分配数组中第一项的指针。
  • 8 是系统上指针的大小
  • 我认为 C 编译器无法找到 malloc 分配的内存大小。虽然,有一些扩展可以告诉你分配数组的大小。更多信息在这里:stackoverflow.com/questions/1281686/…
  • 您需要自己跟踪尺寸。

标签: c char malloc sizeof


【解决方案1】:

你找不到 malloc 使用sizeof() 方法分配的内存大小。但是,有一些特定于操作系统的函数可用于查找分配的大小。

如果您在 Windows 中,您可以在 malloc.h 头文件中使用 _msize() 函数。它将以字节为单位返回大小。

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

int main(){
    char *d = malloc(2356 << 1);
    printf("size of *d: %d\n", _msize(d));
    //size of *d: 4712

    char *e = malloc(2356 * sizeof(*e));
    printf("size of *d: %d\n", _msize(e));
    //size of *d: 2356

    char *f = malloc(2356 * sizeof(char));
    printf("size of *d: %d\n", _msize(f));
    //size of *d: 2356
    return 0;
}

您可以在此线程中找到有关其他操作系统特定功能的更多信息:Determine size of dynamically allocated memory in C

【讨论】:

  • 请不要向新程序员推荐特定平台的技巧。
  • @n.'pronouns'm。我同意你的看法,但这将是 OP 完成工作的正确选择。
  • 如果我是 OP 的教授,他们会因此获得 F,这与完成工作完全不同。
  • 是的,跟踪您自己的分配是正确的做法。如果我在拉取请求中遇到类似_msize 的内容,该拉取请求会直接进入垃圾箱,不问任何问题。你在你的软件中使用_msize 吗?如果有,请告诉我们您在哪里工作。
  • 太好了,请永远不要在实际代码中使用这些函数。在实际代码中,我们一直使用替代的malloc 实现。这些函数会默默地返回错误的结果,你的代码会以奇怪和不可预知的方式失败。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
  • 2013-09-12
  • 2012-07-27
  • 2018-11-15
  • 2023-03-17
相关资源
最近更新 更多