'calloc' 二维数组未正确初始化
'calloc' on bidimensional array doesn't initialize properly
我正在尝试用 C 语言:
定义一个 return 方阵 (NxN) 的函数
#define true 1
#define false 0
typedef char bool;
typedef bool** Matrix;
Matrix matrix_alloc(int size)
{
Matrix matrix = (bool **) malloc(sizeof(bool) * size);
int i;
for (i = 0; i < size; i++) {
matrix[i] = (bool *) calloc(size, sizeof(bool));
}
return matrix;
}
void matrix_print(Matrix matrix, int size)
{
int i, j;
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
printf("%i ", matrix[i][j]);
}
printf("\n");
}
}
但是,calloc()
似乎没有按预期将“单元格”初始化为零。有人告诉我 calloc
初始化是安全的,所以我相信我的逻辑有漏洞。这是 运行 两个函数(例如创建 9x9 矩阵)时的输出:
48 77 104 0 72 77 104 0 96
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
分配的大小错误:matrix
是指向 bool *
的指针,而不是 bool
。
避免错误,大小为 de-referenced 指针,而不是类型。
C 中不需要强制转换,应省略。
// too small
// Matrix matrix = (bool **) malloc(sizeof(bool) * size);
Matrix matrix = malloc(sizeof *matrix * size);
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv, char **envp) {
int rows=3, cols=2, i, j;
char *myName = (char *) calloc(rows*cols, sizeof(char));
char chTemp = 'a';
//Kh
//al
//id
*(myName)='K'; *(myName+1)='h'; *(myName+2)='a'; *(myName+3)='l'; *(myName+4)='i'; *(myName+5)='d';
for(i=0; i<rows; i++){
for(j=0; j<cols; j++){
chTemp = *(myName+i*cols+j);
printf("%c", chTemp);
}
printf("\n");
}
return (EXIT_SUCCESS);
}
我正在尝试用 C 语言:
定义一个 return 方阵 (NxN) 的函数#define true 1
#define false 0
typedef char bool;
typedef bool** Matrix;
Matrix matrix_alloc(int size)
{
Matrix matrix = (bool **) malloc(sizeof(bool) * size);
int i;
for (i = 0; i < size; i++) {
matrix[i] = (bool *) calloc(size, sizeof(bool));
}
return matrix;
}
void matrix_print(Matrix matrix, int size)
{
int i, j;
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
printf("%i ", matrix[i][j]);
}
printf("\n");
}
}
但是,calloc()
似乎没有按预期将“单元格”初始化为零。有人告诉我 calloc
初始化是安全的,所以我相信我的逻辑有漏洞。这是 运行 两个函数(例如创建 9x9 矩阵)时的输出:
48 77 104 0 72 77 104 0 96
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
分配的大小错误:matrix
是指向 bool *
的指针,而不是 bool
。
避免错误,大小为 de-referenced 指针,而不是类型。
C 中不需要强制转换,应省略。
// too small
// Matrix matrix = (bool **) malloc(sizeof(bool) * size);
Matrix matrix = malloc(sizeof *matrix * size);
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv, char **envp) {
int rows=3, cols=2, i, j;
char *myName = (char *) calloc(rows*cols, sizeof(char));
char chTemp = 'a';
//Kh
//al
//id
*(myName)='K'; *(myName+1)='h'; *(myName+2)='a'; *(myName+3)='l'; *(myName+4)='i'; *(myName+5)='d';
for(i=0; i<rows; i++){
for(j=0; j<cols; j++){
chTemp = *(myName+i*cols+j);
printf("%c", chTemp);
}
printf("\n");
}
return (EXIT_SUCCESS);
}