【发布时间】:2012-02-27 09:03:21
【问题描述】:
我正在尝试编写一个小矩阵程序。使用双指针不起作用,所以我认为最简单的方法是使用具有 #rows 和 #columns 以及 1d 数组作为矩阵的结构。
但是我得到的矩阵初始化有一些错误: 索引 (0,0) 和 (0.1) 而不是 0 的奇怪值。
也许有这样的东西: 矩阵 *mtrx = malloc(sizeof(matrix)); mtrx->m = malloc(r * c * sizeof(int));
矩阵.c:
#include <stdio.h>
#include <stdlib.h>
#include "Matrix.h"
matrix *alloc_matrix(int r, int c)
{
matrix *mtrx = malloc(sizeof(matrix));
mtrx->m = malloc(r * c * sizeof(int));
if (mtrx == NULL || m == NULL) {
printf("Out of memory.");
exit(1);
}
mtrx->rows = r;
mtrx->columns = c;
return mtrx;
}
void free_matrix(matrix *mtrx)
{
free(mtrx->m);
free(mtrx);
}
void set(matrix *mtrx, int r, int c, int v)
{
(mtrx->m)[r * mtrx->columns + c] = v;
}
int get(matrix *mtrx, int r, int c)
{
return (mtrx->m)[r * mtrx->columns + c];
}
void print_matrix(matrix *mtrx)
{
int i,j;
printf("\n");
for(i=0; i<mtrx->rows; i++) {
for(j=0; j<mtrx->columns; j++) {
printf("%i ", get(mtrx,i,j));
}
printf("\n");
}
}
矩阵.h:
struct matrix_ {
int rows;
int columns;
int *m;
};
typedef struct matrix_ matrix;
matrix *alloc_matrix(int r, int c);
void free_matrix(matrix *mtrx);
void set(matrix *mtrx, int r, int c, int v);
int get(matrix *mtrx, int r, int c);
void print_matrix(matrix *m);
main.c:
#include <stdio.h>
#include <stdlib.h>
#include "Matrix.h"
int main(void)
{
matrix *m = alloc_matrix(3,4);
print_matrix(m);
printf("\nm[0][0] = %i", get(m,0,0));
set(m,0,0,0);
printf("\nm[0][0] = %i", (m->m)[0]);
printf("\nm[0][0] = %i", (m->m)[12]);
return 0;
}
输出: 除了 (0,0) 和 (0,1) 之外的所有元素都是 0。
【问题讨论】:
-
所有,它现在可以工作了。但是 malloc+memset 和 calloc 之间的效率有什么区别吗?还是 calloc 只是 malloc+memset?
标签: c memory-management matrix initialization malloc