将数组中的所有值设置为零时出错

时间:2015-09-11 19:26:09

标签: c

我只是尝试使用零值初始化动态创建的矩阵:

#include <stdio.h>
#include <stdlib.h>

void writeMatrix (int **m, int size) {
    int i, j;
    for (i=0; i<size; i++) {
        for (j=0; j<size; j++) {
            printf("%i ", m[i][j]);
        }
        printf("\n");
    }
}

int main(void) {

    int i, size;
    scanf("%i", &size);

    int **m;
    m = malloc(size * sizeof(int *));
    for (i=0; i<size; i++) {
        m[i] = malloc(size * sizeof(int));
        m[i] = {0};
    }

    writeMatrix(m, size);

    return 0;
}

但它与this error崩溃了:

compilation info
prog.c: In function 'main':
prog.c:23:10: error: expected expression before '{' token
   m[i] = {0};
          ^

这不是将所有矩阵值设置为零的正确方法吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

除非您在定义数组时初始化数组,否则不能使用m[i] = {0};之类的语法。您要使用的是memset

memset(m[i], 0, size * sizeof(int));

或者您可以使用calloc,它为数组分配内存并将其全部归零:

m[i] = calloc(size, sizeof(int));

答案 1 :(得分:2)

不,这是初始化静态数组的方法,而不是动态数组。

一般来说,你可以:

  1. 通过分配的int数组的每个元素并将其设置为0.

    for(int j = 0; j&lt; size; ++ j) {     m [i] [j] = 0; }

  2. 使用memset将数组的所有值设置为0。

    memset(m [i],0,size * sizeof(int));

  3. 使用calloc而不是malloc分配与malloc类似的内存,并将所有分配的内存设置为0。