我编写的代码生成一个带有 NODES 行的矩阵,每行都有一个用户指定的列数(请参阅下面的 node_degree )。然后我用矩阵填充矩阵中的每个条目(值无关紧要)。
当我使用Geany在Fedora上构建程序时,我没有收到任何错误消息。但是,当我运行程序时,我得到:
./ geany run script.sh第5行:3586分段错误(核心 倾销)“./ ad_matrix_outside_main
注意:ad_matrix_outside_main是c文件的名称。
以下是该计划:
#include <stdio.h>
#include <stdlib.h>
#define NODES (10)
#define CONNECTED (5)
int main()
{
int i, j;
double **matrix;
matrix = (double **)malloc(sizeof(double *)*NODES);
int node_degree[CONNECTED]; //Example: 5 nodes are connected (have non-zero degree).
for(i=0; i<CONNECTED; i++)
{
printf("Enter degree of node %d\n", i); //Index is node, value is degree.
scanf("%d", &node_degree[i]);
}
for(i=0; i<CONNECTED; i++)
{
matrix[i] = (double*)malloc( sizeof(double)* (node_degree[i] + 1) );
}
for(i=0; i<NODES; i++)
{
for(j=0; j<node_degree[i]; j++)
{
matrix[i][j] = j; //j can be the node that node i connected to.
}
matrix[i][j] = NODES;
}
for(i=0; i<NODES; i++)
{
free( matrix[i] );
}
free(matrix);
return(0);
}
可能导致错误的原因是什么?我有一种感觉,我的符号可能是问题所在。
答案 0 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
#define NODES (10)
#define CONNECTED (5)
int main()
{
int i, j;
double **matrix;
matrix = (double **)malloc(sizeof(double *)*NODES);
int node_degree[CONNECTED]; //Example: 5 nodes are connected (have non-zero degree).
for(i=0; i<CONNECTED; i++)
{
printf("Enter degree of node %d\n", i); //Index is node, value is degree.
scanf("%d", &node_degree[i]);
}
for(i=0; i<CONNECTED; i++)
{
matrix[i] = (double*)malloc( sizeof(double)* (node_degree[i] + 1) );
//这里你是malloc for 5 }
for(i=0; i<NODES; i++)
{
for(j=0; j<node_degree[i]; j++)
{
matrix[i][j] = j; //j can be the node that node i connected to.
}
matrix[i][j] = NODES;
//在这里你分配10! }
for(i=0; i<NODES; i++)
{
free( matrix[i] );
}
free(matrix);
return(0);
}