【发布时间】:2017-02-02 11:59:23
【问题描述】:
我是一个新手,试图学习如何在 C 中创建动态数组。当我使用 code:blocks 构建它时,该代码不会给我任何错误,但是当我运行它时它会崩溃。我认为崩溃与我释放内存的方式有关,因为代码在崩溃之前给了我想要的输出。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i, j;
int *p = (int *)malloc(sizeof(*p));
printf("Hello World! I have created a dynamic array of 20x30 integers! \n");
for (i = 0; i <= 19; i++)
{
p[i] = (int )malloc(sizeof(int*));
printf(" %2d ", i);
for (j = i + 1; j <= 29 + i; j++)
{
p[i] = 0;
printf("%2d", j);
}
printf("\n");
}
for (i = 0; i <= 19; i++);
{
free(p[i]);
}
free(p);
return 0;
}
【问题讨论】:
-
您的第一个 malloc 为单个 int 分配空间。
-
另外,
p[i] = (int )malloc(sizeof(int*));是错误的。p[i]是int而不是指针,因此您不应在其中存储指针。在许多系统上,int的大小和指针是不同的,因此该代码也可能导致崩溃。 -
不需要在C中强制转换malloc和friends的结果,也不推荐任何方式。更重要的是,它可能会像您的情况一样隐藏错误。删除所有那些无用的强制转换,重新编译,修复代码,直到不再发出警告,开心。 :-) 您还想更改此
malloc(sizeof(*p));以分配足够的指针,而不仅仅是一个。
标签: c