簡體   English   中英

二維數組上的“calloc”未正確初始化

[英]'calloc' on bidimensional array doesn't initialize properly

我正在嘗試定義一個函數來用C 語言返回一個方陣 (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

避免錯誤,大小為取消引用的指針,而不是類型。

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM