【发布时间】:2014-06-10 13:09:40
【问题描述】:
我从这段代码中得到一个总线错误 10。当我输入打印语句时,出现分段错误错误。我在一个更大的程序中使用这两个函数来计算矩阵的行列式。这些错误是什么意思?我是 C 环境的新手。谢谢!
int* cofactor(int* matrix, int co_row, int co_column, int size_of_matrix){
int* result;
int i, offset;
int row, column;
result = duplicate_matrix(matrix, size_of_matrix-1);
i = 0;
offset = row*size_of_matrix+column;
for (row = i; row < size_of_matrix; row++){
for (column = i; column < size_of_matrix; column++){
if ((row != co_row) && (column != co_column)){
i = offset;
i += 1;
*result = i;
}
return result;
}
}
}
int* determinant(int* matrix, int size_of_matrix){
int sign, x, one=1;
int* size;
int* result;
int* the_sign;
int* comatrix;
sign = one;
*the_sign = sign;
*size = size_of_matrix;
result = malloc(sizeof(int) * size_of_matrix*size_of_matrix);
comatrix = malloc(sizeof(int) * size_of_matrix*size_of_matrix);
if (*size == one){
return size;
}
else{
for (x = 0; x < size_of_matrix; x++){
comatrix = cofactor(matrix, 0, x, size_of_matrix);
*result = x;
*result += *matrix;
*matrix *= *the_sign;
*the_sign *= *determinant(comatrix, size_of_matrix);
*the_sign *= -1;
*result = *the_sign;
}
return result;
}
}
【问题讨论】:
-
那些错误意味着你的指针都搞砸了,没有按照你的想法去做。例如,
*the_sign = sign;会导致程序崩溃,因为您正在取消引用尚未初始化的指针。 -
代码有很多问题:
offset = row*size_of_matrix+column那时行和列没有初始化;*result = i结果永远不会改变,所以你总是写到一个位置;return result在 for 循环内。我只看了第一个函数。 -
很难看出
duplicate_matrix()是如何避免使用malloc()进行动态内存分配的——但是没有代码可以释放它创建的任何矩阵。这会给您留下一个问题——duplicate_matrix()中的无效代码或内存泄漏。 -
你认为
*the_sign = sign;在做什么?
标签: c debugging recursion matrix segmentation-fault