c - 用零初始化一个二维数组;打印其值表明并非每个元素都包含 0

标签 c malloc multidimensional-array

我已经在这里搜索了答案,但找不到适合我的情况。

我有一个函数 make_array(),它生成一个二维数组,并且必须用零填充它。 在 main() 中调用此函数并打印值时,会出现奇怪的输出,这在其他机器上是不可复制的...

[...]    
Valuearray[0][13]: 0
Valuearray[0][14]: 65
Valuearray[0][15]: 0
[...]

数组的其余部分包含零。 搜索我随机更改的答案

Array[i][j] = 0;

Array[i][j] = 123;

得到了

Valuearray[0][0]: 0
Valuearray[0][1]: 0
Valuearray[0][2]: 0
Valuearray[0][3]: 0
Valuearray[0][4]: 0
Valuearray[0][5]: 0
Valuearray[0][6]: 0
Valuearray[0][7]: 0
Valuearray[0][8]: 0
Valuearray[0][9]: 0
Valuearray[0][10]: 0
Valuearray[0][11]: 0
Valuearray[0][12]: 0
Valuearray[0][13]: 0
Valuearray[0][14]: 65
Valuearray[0][15]: 0
Valuearray[0][16]: 123
[...]

其余包含 123。因此只有前 16 个元素不会被 for 循环更改。

我的程序代码:

//#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

const int global_file_count = 10;
const int global_max_x_coord = 309;
const int global_min_x_coord = 111;


int** make_array(int SizeY, int SizeX){ // SizeY=global_file_count+1, 
                                        // SizeX=global_max_x_coord-global_min_x_coord

    //http://pleasemakeanote.blogspot.de/2008/06/2d-arrays-in-c-using-malloc.html

    int** Array;  
    Array = (int**) malloc((SizeX)*sizeof(int*)); 
    for (int i = 0; i < SizeX; i++) {
       Array[i] = (int*) malloc((SizeY)*sizeof(int));
   }

    for (int i=1;i<=SizeY;i++){ // should fill everything element with 0 (????)
        for(int j=0;j<=SizeX;j++){
                Array[i][j] = 123;
        }
    }

return Array;
    free(Array);
}

int main(){

    int** Valuearray = make_array(global_file_count+1, (global_max_x_coord-global_min_x_coord));

    for (int i=0;i<=global_file_count+1;i++){
        for(int j=0;j<=(global_max_x_coord-global_min_x_coord);j++){
                printf("Valuearray[%i][%i]: %i\n", i, j, Valuearray[i][j]);
        }
    }
    free(Valuearray);
}

还有,当我多种一些

Array[0][14] = 0;

之前

return Array;

在我的 make_array() 函数中,一切正常,值发生了变化。但我真的宁愿让我的 for 循环这样做......

我的问题是:由于它不可重现,我能做些什么呢?这是什么原因呢? 如果此信息有用,我正在使用 Ubuntu 12.10.、Sublime Text 2 作为 IDE,以及 gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 作为编译器。 提前致谢,对于一大堆文字感到抱歉。

最佳答案

试试这个

for (int i=0;i<SizeX;i++){ // should fill everything element with 0 (????)
    for(int j=0;j<SizeY;j++){
            Array[i][j] = 0;
    }
}

或者将malloc()替换为calloc(),而不是上面的for循环。

关于c - 用零初始化一个二维数组;打印其值表明并非每个元素都包含 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16485684/

相关文章:

c - 坚持退出 C 中的循环

c - 输入后的程序 block

python - 从多维 numpy 数组中选择

cmocka自由运行和捕获异常

c - 如何 malloc char** 表?

c - 使用 void 指针在 C 中重新编程 Calloc/Realloc

c - 为结构及其成员分配内存

javascript - 通过 html 将多维键控数组传递到 javascript

javascript - 多维数组在 Javascript 中返回 'undefined' 值

c - 使用#defines 自动替换变量