繁体   English   中英

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

[英]Error when setting all values in array to zero

我只是想用零值初始化一个动态创建的矩阵:

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

但它因此错误而崩溃:

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

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

提前致谢。

你不能使用像m[i] = {0};这样的语法m[i] = {0}; 除非您在定义数组时对其进行初始化。 您要使用的是memset

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

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

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

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

一般来说,您可以:

  1. 传递已分配的int数组的每个元素并将其设置为 0。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM