c malloc问题

Gre*_*rey 1 c malloc

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

int main(){

 int row;
 int col;
 int i=1;
 double ** doubleNode;
 // *(*(doubleNode+row)+coln)
 doubleNode=malloc(sizeof(double)*4);
 *doubleNode=malloc(sizeof(double *)*4);


 for(row=0; row <4; row++){
   for(col =0; col<4;col++){
    *(*(doubleNode+row)+col)=i;
    i++;
   }
 }


free(doubleNode);
free(*doubleNode);
 return 0; 
}
Run Code Online (Sandbox Code Playgroud)

这是双指针的测试代码.它用gcc编译好,但是当我运行它时.它给了我分段错误.你知道我哪里做错了吗?

谢谢

Vla*_*mir 8

doubleNode必须将内存分配为指向double的指针,然后为数组中的每个指针分配内存:

doubleNode=malloc(sizeof(double*)*4);
for (int i = 0; i < 4;++i)
   doubleNode[i]=malloc(sizeof(double)*4);
Run Code Online (Sandbox Code Playgroud)

这同样适用于释放内存:

for (int i = 0; i < 4;++i)
   free(doubleNode[i]);
free(doubleNode);
Run Code Online (Sandbox Code Playgroud)

  • 我推荐这种风格:pointer = malloc(sizeof(*pointer)); (2认同)