c - 少量代码中的段错误

标签 c

我正在尝试一些事情,但遇到了这个小障碍。为什么我会在这种情况下得到 segault ?

int main()
{
    int col_num,row_num=0;
    FILE *f = fopen("db.csv", "w+");

    int row_max = 10000;        
    int col_max = 10000;

    !!!row_num & col_num is determined due to time!!!

    int end_matrix[row_num][col_num];
    for(int row=0;row!=row_max;row++){
        for(int column=0;column!=col_max;column++){
            end_matrix[row][column] = row*column;    
        }  
        fprintf(f,"\n");
    }
    fclose(f);
}

最佳答案

您正在使用 C99 可变长度数组功能来定义 end_matrix 的大小。不幸的是,row_num 和 col_num 都为零,这意味着两个“维度”都没有分配任何存储空间。当您尝试写入数组时,由于没有为其保留存储空间,因此您的写入超出了末尾并触发了未定义的行为,表现为段错误。

看起来您已将 row_maxcol_max 定义为常量;也许您打算在定义 end_matrix 时使用它们而不是 row_numcol_num

关于c - 少量代码中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55432655/

相关文章:

c - sprintf() 在 C 中没有尾随空空格

c - 为什么我用这个方法反向的时候原来的双链被修改了?

c++ - 8位BCD校验

c++ - Pro*C 代码处理解决ORA-01405 : fetched column value is NULL

c++ - 读写缓冲区问题

c++ - 在多线程应用程序中等待变量的最佳方法是什么

c - 保留源文件路径的问题

c - 多线程程序在 HTTPS 请求上崩溃

c - 如何将自己的头文件目录添加到 Mac 终端 gcc?

c - strlen 如何为 {'1' ,'1' } 和 {'1' ,'1' ,'\0' } 提供相同的输出?