内存分配。二维数组(空函数)
Memory allocation. 2D array (Void function)
我在这个论坛上关注了几个例子,但似乎我的程序有时仍然会崩溃。
我只想使用 void function
进行内存分配。
void alloc(int ***matrix, int n)
{
int i = 0;
for( ; i < n; i++)
{
(*matrix)[i] = (int*)malloc(n * sizeof(int));
}
i = 0;
for( ; i < n; i++)
{
int j = 0;
for( ; j < n; j++)
{
(*matrix)[i][j] = i * j;
}
}
}
//-------------------------------------------------------------------
int main()
{
int n;
int **matrix_pp;
printf("Enter n: ");
scanf("%d", &n);
alloc(&matrix_pp, n);
free(matrix_pp);
return 0;
}
您尝试在 (*matrix)[i]
分配之前使用它。添加:
(*matrix) = malloc(n * sizeof(**matrix));
在你的 for
循环之前。
这里注意两点:
1) 不要转换 malloc
、
的结果
2) 使用sizeof(*pointer)
而不是显式写出类型;这样,如果您以后决定更改类型,它仍然有效。
此外,您还需要 free
将循环中的所有分配也作为一个循环;否则,你有内存泄漏。
我在这个论坛上关注了几个例子,但似乎我的程序有时仍然会崩溃。
我只想使用 void function
进行内存分配。
void alloc(int ***matrix, int n)
{
int i = 0;
for( ; i < n; i++)
{
(*matrix)[i] = (int*)malloc(n * sizeof(int));
}
i = 0;
for( ; i < n; i++)
{
int j = 0;
for( ; j < n; j++)
{
(*matrix)[i][j] = i * j;
}
}
}
//-------------------------------------------------------------------
int main()
{
int n;
int **matrix_pp;
printf("Enter n: ");
scanf("%d", &n);
alloc(&matrix_pp, n);
free(matrix_pp);
return 0;
}
您尝试在 (*matrix)[i]
分配之前使用它。添加:
(*matrix) = malloc(n * sizeof(**matrix));
在你的 for
循环之前。
这里注意两点:
1) 不要转换 malloc
、
2) 使用sizeof(*pointer)
而不是显式写出类型;这样,如果您以后决定更改类型,它仍然有效。
此外,您还需要 free
将循环中的所有分配也作为一个循环;否则,你有内存泄漏。