代碼確實太多了。讓我來總結一下:
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