首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无效的8值写入大小

无效的8值写入大小
EN

Stack Overflow用户
提问于 2017-11-28 02:58:52
回答 1查看 273关注 0票数 0

我正在编写一个函数来解析一个.csv文件,并且我在valgrind中得到了一个错误。具体来说,就是这样:

代码语言:javascript
复制
==5450== Invalid write of size 8
==5450==    at 0x404FA0: parse_exemplars (util.c:568)
==5450==    by 0x40508E: get_test_and_train_data (util.c:595)
==5450==    by 0x402737: setup (pony_gp.c:727)
==5450==    by 0x4027E5: main (pony_gp.c:761)

这是带有指示错误行的代码:

代码语言:javascript
复制
csv_reader *reader = init_csv(file_name, ',');

double **fitness_cases, *targets;
int num_columns = 122;
int num_lines = 121;

// leave space for NULL at end
fitness_cases = malloc(sizeof(double **) * num_lines);
for (int i = 0; i < num_lines; i++) {
    fitness_cases[i] = malloc(sizeof(double *));

    for (int k = 0; k < num_columns; k++) {
        fitness_cases[i] = malloc(sizeof(double) * (num_columns - 1));
    }
}

// leave space for NAN at end
targets = malloc(sizeof(double) * (num_lines));

csv_line *row;
int f_i = 0;
int t_i = 0;

while ((row = readline(reader))) {
    int i;
    for (i = 0; i < num_columns; i++) {
        if (i == num_columns - 1) {
            targets[t_i++] = atof(row->content[i]);
        }
        else {
            fitness_cases[f_i][i] = atof(row->content[i]);
        }
    }

    fitness_cases[f_i][i-1] = (double)NAN; //<----- This is where it says the error is, line 568.
    f_i++;
}

每当我检查fitness_casesf_i的大小时,我总是得到与(double)NAN大小相同的值,所以我猜想它在函数中出现得更早吗?

指向github页面的链接是(我询问的这个函数目前还没有在回购程序中更新):c

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-28 03:04:07

代码语言:javascript
复制
fitness_cases[f_i][i-1] = (double)NAN; 

这里的i-1值将是num_columns -1,但由于您已经将空间分配为

代码语言:javascript
复制
fitness_cases[i] = malloc(sizeof(double) * (num_columns - 1));

第二个数组下标的最大索引可能会少一个ie num_columns - 2,否则就会超出界限。

例如:

代码语言:javascript
复制
fitness_cases[i] = 3 * sizeof(double);

fitness_cases[i][0]fitness_cases[i][1]fitness_cases[i][2]都是有效的,fitness_cases[i][3]是不允许的,它将导致无效的写入,正如val差所指出的那样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47523250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档