【问题标题】:dynamic 2d char array allocation not working correctly动态 2d 字符数组分配无法正常工作
【发布时间】:2013-04-28 12:04:44
【问题描述】:

我正在尝试制作一个动态大小的二维字符数组。每当我分配内存时,内部数组总是与外部数组大小相同。

char **memory;
int outer = 1000;
int inner = 2;

memory = (char**)malloc(outer * sizeof(char*));
for(i = 0; i < outer; i++){
    memory[i] = (char*)malloc(inner * sizeof(char));
}

这导致 1000 行 1000 长度的 char 数组,我不知道为什么。有人可以帮忙吗?

【问题讨论】:

  • 你如何检查每个char* 指向一个大小为 1000 的块?
  • C 中,您几乎总是可以访问读取未分配空间中的数据。你确定你没有创建一个正确大小的数组吗?
  • 我明白了。阿德里安的评论让我意识到我是多么愚蠢。我正在查看 Visual Studio 中的监视面板,认为它实际上是在告诉我内部 char 数组的大小,而它只是查看每个指针后 1000 个字符的字节。有没有办法让它只看 2 个字节?
  • 准确地说,这将导致分配 1001 个数组,一个包含一千个指针的数组和 1000 个数组,每个数组正好是两个字符宽。它是 not a 二维数组。为了回答您的监视窗口问题,请尝试将 ptr,2 作为监视表达式,其中 ptr 是正在检查的指针变量。
  • 你真正想要什么?这不是您要分配的二维数组,而是通过指针数组模拟这种野兽。如果不需要,请不要这样做,现代 C 语言免费内置了多维数组。其他吹毛求疵:不要把malloc的return投过去,这样很容易隐藏错误,sizeof(char)保证是1char (*memory)[outer] = malloc(inner*outer); 应该是您使用符合 C99 的编译器所需要的全部。

标签: c multidimensional-array char malloc arrays


【解决方案1】:

这将产生一个 char 的二维数组,其中行 = 1000,列 = 2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多