【问题标题】:Dynamic array in C cause segmentation faultC中的动态数组导致分段错误
【发布时间】:2014-02-19 06:19:06
【问题描述】:

我已经这样定义了一个动态数组:

double   *n_data ;
int n_data_c = 0, n_cnt = 0;
n_data_c = count_lines_of_file("abnorm");
n_data = (double *)malloc(n_data_c * sizeof(double));

在循环中我计算距离并这样做:

n_cnt++;
n_data[n_cnt] = distance;

但它在这里返回segmentation fault:n_data[n_cnt] = distance;

我想知道我是否做错了什么。

【问题讨论】:

标签: c arrays dynamic


【解决方案1】:

检查 malloc 返回的内容,如果返回 0,则失败。我认为,更有可能是您的 n_cnt 超出范围。如果它是负数,或者大于或等于 n_data_c,那么你会得到一个段错误。

【讨论】:

    【解决方案2】:

    您超出了您的数组缓冲区..

    比较 n_cnt 和 n_data_c 并且仅在 n_cnt

    n_cnt++;
    if (n_cnt < n_data_c)
    {
    n_data[n_cnt] = distance;
    }
    

    【讨论】:

    • n_data_c 为 7,因为我的文件有 7 行,n_cnt 在第一次迭代时为 1,然后它返回 segfault。
    【解决方案3】:

    n_data_c = count_lines_of_file("abnorm");

    这会产生分段错误。检查n_data_c的值

    【讨论】:

    • @G one:我检查了一下,它返回 7,因为我的文件有 7 行。
    • int n_data_c = 7, n_cnt = 0; n_data = (double *)malloc(n_data_c * sizeof(double)); n_cnt++; n_data[n_cnt] = 10; 我试过了,它没有给我任何段错误 printf("%f", n_data[n_cnt]);
    • 您是否检查了将参数传递到calculatedistance() 是否正确??
    【解决方案4】:

    在 mallocing 之前尝试打印 n_data_c 的值。

    【讨论】:

    • 我检查了一下,它返回 7,因为我的文件有 7 行。
    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 1970-01-01
    • 2019-07-20
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多