相关疑难解决方法(0)

为什么malloc在gcc中将值初始化为0?

也许从平台到平台不同,但是

当我使用gcc编译并运行下面的代码时,我每次都在ubuntu 11.10中得到0.

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

int main()
{
    double *a = (double*) malloc(sizeof(double)*100)
    printf("%f", *a);
}
Run Code Online (Sandbox Code Playgroud)

为什么malloc表现得像这样,即使有calloc?

是不是意味着只是将值初始化为0会产生不必要的性能开销,即使您有时不想要它也是如此?


编辑:哦,我之前的例子不是initiazling,但碰巧使用"新鲜"块.

我正在寻找的是为什么它在分配一个大块时初始化它:

int main()
{
    int *a = (int*) malloc(sizeof(int)*200000);
    a[10] = 3;
    printf("%d", *(a+10));

    free(a);

    a = (double*) malloc(sizeof(double)*200000);
    printf("%d", *(a+10));
}

OUTPUT: 3
        0 (initialized)
Run Code Online (Sandbox Code Playgroud)

但感谢您指出在进行mallocing时存在安全原因!(没想过).当分配新块或大块时,它必须初始化为零.

c linux malloc gcc

76
推荐指数
4
解决办法
4万
查看次数

使用MPI在C中发送2D阵列块

如何将二维数组块发送到不同的处理器?假设2D阵列大小为400x400,我想将大小为100X100的块发送到不同的处理器.这个想法是每个处理器将在其单独的块上执行计算,并将其结果发送回第一个处理器以获得最终结果.
我在C程序中使用MPI.

c parallel-processing mpi

48
推荐指数
1
解决办法
4万
查看次数

如何分配具有连续内存的二维数组?我如何使用它来访问行和列?给我一个例子

我创建了一个二维数组,其内容如下

     int i,j,lx,ly;// lx,ly are the row and column respectively
     double** a;

     a=(double**) malloc((lx+2)*sizeof(double));

     a[0]= (double*) malloc((lx+2)*(ly+2)* sizeof(double));

     assert(a[0]); 

     for(i=1;i<lx+2;i++)
     {
       a[i]=a[i-1]+i*(ly+2);
     }
Run Code Online (Sandbox Code Playgroud)

// 我为这个数组中的所有元素分配了一个值 0,如下所示

    for(i=0;i<(lx+2)*(ly+2);i++)
    {
      a[i]=0;
    } 
Run Code Online (Sandbox Code Playgroud)

// 我打印出下面的所有元素

      for(i=0;i<(lx+2)*(ly+2);i++)
      {
         printf("position %d values %d\n",i,a[i]);
      } 
Run Code Online (Sandbox Code Playgroud)

// 当我看到输出时,它向我显示了一个特定位置 13 处的垃圾值。我无法弄清楚。还请告诉我如何访问行和列,如 Eg 以访问第 7 列第 0 行和第 5 行就 lx 而言,第 6 列列,如我的代码所示

c arrays dynamic-allocation

3
推荐指数
1
解决办法
3008
查看次数

标签 统计

c ×3

arrays ×1

dynamic-allocation ×1

gcc ×1

linux ×1

malloc ×1

mpi ×1

parallel-processing ×1