马洛克问题 #包括 #包括 int main(){ int行; int col; int i=1; 双**双节点; //*(*(双节点+行)+coln) doubleNode=malloc(sizeof(double)*4); *doubleNode=malloc(sizeof(double*)*4); 对于(row=0;row
我可以立即看到一个问题。释放doubleNode,然后取消引用它。交换两个空闲节点 此外,我认为您的Malloc尺码是错误的。第一个尺码应该是sizeof(double*),第二个尺码应该是sizeof(double*)马洛克问题 #包括 #包括 int main(){ int行; int col; int i=1; 双**双节点; //*(*(双节点+行)+coln) doubleNode=malloc(sizeof(double)*4); *doubleNode=malloc(sizeof(double*)*4); 对于(row=0;row,c,malloc,C,Malloc,我可以立即看到一个问题。释放doubleNode,然后取消引用它。交换两个空闲节点 此外,我认为您的Malloc尺码是错误的。第一个尺码应该是sizeof(double*),第二个尺码应该是sizeof(double*) 编辑:正如其他人所说,您只分配了矩阵中的第一个“列”。我可以立即看到一个问题。您释放doubleNode,然后取消引用它。交换两个空闲的 此外,我认为您的Malloc尺码是错误的。第一个尺码应该是sizeof(double*),第二个尺码应该是sizeof(double*) 编
编辑:正如其他人所说,您只分配了矩阵中的第一个“列”。我可以立即看到一个问题。您释放doubleNode,然后取消引用它。交换两个空闲的 此外,我认为您的Malloc尺码是错误的。第一个尺码应该是sizeof(double*),第二个尺码应该是sizeof(double*)
编辑:正如其他人所说,您只分配了矩阵中的第一个“列”。doubleNode的内存必须分配为指向double的指针,然后您应该为数组中的每个指针分配内存:
#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;
}
doubleNode=malloc(sizeof(double*)*4);
对于(int i=0;i<4;++i)
doubleNode[i]=malloc(sizeof(double)*4);
这同样适用于释放内存:
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)
自由(双节点[i]);
自由(双节点);
必须将双节点的内存分配为指向double的指针,然后您应该为数组中的每个指针分配内存:
#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;
}
doubleNode=malloc(sizeof(double*)*4);
对于(int i=0;i<4;++i)
doubleNode[i]=malloc(sizeof(double)*4);
这同样适用于释放内存:
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)
自由(双节点[i]);
自由(双节点);
您只需malloc
ing矩阵的第一个“列”。此行:
for (int i = 0; i < 4;++i)
free(doubleNode[i]);
free(doubleNode);
与此等效:
*doubleNode=malloc(sizeof(double *)*4);
您需要为每一列(或每一行)执行一次。此外,我认为您的sizeof
语句中的类型应该颠倒。您只是malloc
ing矩阵的第一个“列”。此行:
for (int i = 0; i < 4;++i)
free(doubleNode[i]);
free(doubleNode);
与此等效:
*doubleNode=malloc(sizeof(double *)*4);
您需要为每一列(或每一行)执行一次此操作。此外,我认为您的sizeof
语句中的类型应该颠倒。您的速度更快。提醒我明天更新您的答案,因为我今天没有剩余的投票。@Dave-为您解决了:)@Nyan我建议使用二维数组而不是双间接指针-本可以省去OP表单的麻烦。你更快。提醒我明天更新你的答案,因为我今天没有投票了。@Dave-帮你解决了:)@Nyan我建议使用二维数组而不是双间接指针-会让OP从这个麻烦中解脱出来的。