2010-07-17 75 views
1
#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; 
} 

这是一个双指针的测试代码。它与gcc编译好,但是当我运行它。它给我分段错误。你知道我做错了什么吗?c malloc问题

谢谢

回答

8

doubleNode必须将内存分配为指针将翻一番,那么你应该在阵列中的每个指针分配内存:

doubleNode=malloc(sizeof(double*)*4); 
for (int i = 0; i < 4;++i) 
    doubleNode[i]=malloc(sizeof(double)*4); 

这同样适用于释放内存:

for (int i = 0; i < 4;++i) 
    free(doubleNode[i]); 
free(doubleNode); 
+0

你的速度更快。由于我今天没有任何投票,所以提醒我明天请大声答复。 – 2010-07-17 13:47:28

+2

我推荐这种风格: pointer = malloc(sizeof(* pointer)); – Nyan 2010-07-17 13:49:27

+0

@Dave - 为你照顾:) – 2010-07-17 13:53:56

1

我可以立即看到一个问题。你释放doubleNode,然后解除引用。交换两个免费的。

此外,我认为你的mallocs是错误的大小。第一个应该是sizeof(double *)和第二个sizeof(double)。

编辑:正如其他人所说,你只分配矩阵中的第一个“列”。

2

你只有malloc是矩阵的第一个“列”。该行:

*doubleNode=malloc(sizeof(double *)*4); 

相当于本:

doubleNode[0]=malloc(sizeof(double *)*4); 

你需要为每个列(或行)做一次。此外,我认为您的sizeof报表中的类型应该颠倒过来。