C矩阵,分配不是所有元素都是零?
发布时间:2020-12-16 10:21:15 所属栏目:百科 来源:网络整理
导读:我正在尝试编写一个小矩阵程序.使用双向指针不起作用所以我认为最简单的方法是使用#rows和#columns以及1d数组作为矩阵的结构. 但是我得到的矩阵启动有一些错误: 索引(0,0)和(0.1)的奇怪值而不是0. 也许有这样的东西: matrix * mtrx = malloc(sizeof(matrix
我正在尝试编写一个小矩阵程序.使用双向指针不起作用所以我认为最简单的方法是使用#rows和#columns以及1d数组作为矩阵的结构.
但是我得到的矩阵启动有一些错误: 也许有这样的东西: matrix.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 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"); } } matrix.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 v); int get(matrix *mtrx,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)); set(m,0); printf("nm[0][0] = %i",(m->m)[0]); printf("nm[0][0] = %i",(m->m)[12]); return 0; } 输出: 解决方法
函数
malloc分配一块内存,返回指向块开头的指针.它不会将所有位设置为零.
分配一块内存并将其所有位初始化为零 – 这就是calloc的功能. 或者,您可以使用memset将这些位显式设置为零 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |