【发布时间】: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)保证是1。char (*memory)[outer] = malloc(inner*outer);应该是您使用符合 C99 的编译器所需要的全部。
标签: c multidimensional-array char malloc arrays