程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了完全相同的代码,一个段错误,一个没有大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决完全相同的代码,一个段错误,一个没有?

开发过程中遇到完全相同的代码,一个段错误,一个没有的问题如何解决?下面主要结合日常开发的经验,给出你关于完全相同的代码,一个段错误,一个没有的解决方法建议,希望对你解决完全相同的代码,一个段错误,一个没有有所启发或帮助;

我正在用 C 编写一个 numpy。我基本上是在解除分配父结构之前将父结构中的一些属性分配给变量 p_ref,然后稍后在条件语句中使用该变量。这会导致核心转储。但是,如果我不将它分配给变量而只是在最后使用该属性,则它不会出现段错误。我很困惑他们似乎是一样的。另外,我不确定第二种方法是如何工作的,因为它试图从已经释放的结构中引用一个属性。

这是我的矩阵结构头:


typedef struct matrix {
    int rows; // number of rows
    int cols; // number of columns
    double* data; // pointer to rows * columns doubles
    int ref_cnt; // How many slices/matrices are referring to this matrix's data
    struct matrix *parent; // NulL if matrix is not a slice,else the parent matrix of the slice
    int is_1d;
    int is_slice;
    int offset;
} matrix;

double rand_double(double low,double high);
voID rand_matrix(matrix *result,unsigned int seed,double low,double high);
int allocate_matrix(matrix **mat,int rows,int cols);
int allocate_matrix_ref(matrix **mat,matrix *from,int offset,int cols);
voID deallocate_matrix(matrix *mat);
double get(matrix *mat,int row,int col);
voID set(matrix *mat,int col,double val);
voID fill_matrix(matrix *mat,double val);
int add_matrix(matrix *result,matrix *mat1,matrix *mat2);
int sub_matrix(matrix *result,matrix *mat2);
int mul_matrix(matrix *result,matrix *mat2);
int pow_matrix(matrix *result,matrix *mat,int pow);
int neg_matrix(matrix *result,matrix *mat);
int abs_matrix(matrix *result,matrix *mat);

这是我用于解除分配矩阵的代码的两个版本:

版本 1

voID deallocate_matrix(matrix *mat) {        
    if (mat == NulL) { return; }
    mat->ref_cnt = mat->ref_cnt - 1;
    if (mat->ref_cnt > 0) { return; }
    int p_ref = mat->parent->ref_cnt;
    if (mat->parent) {
        deallocate_matrix(mat->parent);
    }
    if (!(mat->is_slicE) && mat->ref_cnt == 0) {
        free(mat->data);
    } else if (p_ref == 1) {
        free(mat->data);
    }
    free(mat);
    return;
}

版本 2

voID deallocate_matrix(matrix *mat) {
    if (mat == NulL) { return; }
    mat->ref_cnt = mat->ref_cnt - 1;
    if (mat->ref_cnt > 0) { return; }
    if (mat->parent) {
        deallocate_matrix(mat->parent);
    }
    if (!(mat->is_slicE) && mat->ref_cnt == 0) {
        free(mat->data);
    } else if (mat->parent->ref_cnt == 1) {
        free(mat->data);
    }
    free(mat);
    return;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的完全相同的代码,一个段错误,一个没有全部内容,希望文章能够帮你解决完全相同的代码,一个段错误,一个没有所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: