代码确实太多了。让我来总结一下:
struct bacon_statement* statms;// = (struct bacon_statement*)malloc(3000 * sizeof(struct bacon_statement));
int ind = 0;
char** yay = strsplit(code, ";");
char* a;
while ((a = *yay)) {
puts(a);
if (strncmp(a, "#", 1)) {
struct bacon_statement statm;
int valid = bacon_make_statement(a, statm);
if (valid != 0) { return valid; }
statms[sta] = statm;
}
sta++;
*(yay)++;
}
puts("Running BACON INTERNAL MAKE");
int ret = bacon_internal_make(statms, internal);
printf("%d\n", ret);
return ret;
但我们能比这更紧凑:
struct bacon_statement* statms;// = (struct bacon_statement*)malloc(3000 * sizeof(struct bacon_statement));
int ind = 0;
char** yay;;
char* a;
for (yay = strsplit(code, ";"); (a = *yay); *(yay)++) {
puts(a);
if (strncmp(a, "#", 1)) {
struct bacon_statement statm;
int valid = bacon_make_statement(a, statm);
if (valid != 0) { return valid; }
statms[sta] = statm;
}
sta++;
}
puts("Running BACON INTERNAL MAKE");
int ret = bacon_internal_make(statms, internal);
printf("%d\n", ret);
return ret;
现在让我们去掉傻stringcompare:
struct bacon_statement* statms;// = (struct bacon_statement*)malloc(3000 * sizeof(struct bacon_statement));
int ind = 0;
char** yay;
char* a;
for (yay = strsplit(code, ";"); (a = *yay); *(yay)++) {
puts(a);
if (*a != '#') {
struct bacon_statement statm;
int valid = bacon_make_statement(a, statm);
if (valid != 0) { return valid; }
statms[sta] = statm;
}
sta++;
}
puts("Running BACON INTERNAL MAKE");
int ret = bacon_internal_make(statms, internal);
printf("%d\n", ret);
return ret;
还是没有意义。 IMO希望通过一系列字符串指针(yay)循环并处理每个字符串。特别是*(yay)++
看起来很尴尬。
也许用“#”他要跳过注释。我希望是这样的:
sta=0;
for (yay = strsplit(code, ";"); (a = *yay); yay++) {
int err;
if (*a == '#') continue;
/* make bacon from a */
err = bacon_make_statements(a, statms[sta]);
if (err) return err;
sta++; /* could overflow ... */
}
/* you need the number of assigned struct members ("sta") to this function */
return bacon_internal_make(statms,sta internal);
关于第二个想法,我的猜测是,strsplit()函数返回一个指针自动(“堆栈”)变量。或者* yay变量增加超出识别范围。或者statms []数组被索引超出范围。
为什么你的malloc注释掉?没有它,对'statms [']的分配就无法工作。而且,它在返回时发生段错误,这意味着你可能在栈上覆盖了某些东西,例如返回尝试返回垃圾。在退货之前发生错误。 – Irfy 2012-02-17 00:57:38
此外,向我们展示'bacon_ *'函数的实现将是必不可少的,因为问题可能在那里。使它更加容易和:这使得它很烦人(中,也许,politer条款 - 此外,使用像'了'和'变量问什么时候寻求帮助,因为阅读国外代码往往够繁琐yay'几乎是一种侮辱很可能让其他人通过使用更有意义的变量/函数/等名称来帮助你)。 – Irfy 2012-02-17 01:02:54
您也不会显示'sta'的声明或初始化。 – 2012-02-17 01:06:35