In the code hereunder, in the while loop (simple scanner), when I substitute !isalnum() by Posix.isspace(), the application crashes when given a very large text file (170 MB) as argument.
Yet it works with !isalnum() instead of isspace(). Also it the application does not crash in either cases when used with a 15 MB text file as input. The error message is : "Segmentation fault" I suspect a memory issue with Posix.isspace() NB : It also crashes if I substitute !isalnum() for (!isalnum(c) && isspace(c)) Serge. //---------------- using Gee; using Posix; // Struct to hold key, values pairs struct pair { public uint freq; public string word; } // Comparison function for stucts int comp(pair a, pair b) { if( a.freq > b.freq) return -1; else if( a.freq < b.freq) return +1; else return 0; } // Equality function for structs bool equals (pair a, pair b) { if (Posix.strcmp(a.word, b.word) ==0 ) return true; else return false; } int main(string[] args) { Posix.assert(args.length == 2); var f = FileStream.open(args[1], "r"); var map = new HashMap<string, uint> (); StringBuilder word = new StringBuilder(""); char c = ' '; // Parse file and insert tokens in Map while (!f.eof()) { c = (char) f.getc (); if (isspace(c)) //if (!isalnum(c)) { if (word.len>0) { if (map.has_key(word.str) == false) { map[word.str] = 1; } else { map[word.str] = map[word.str]+1; } } word.erase(0,-1); } else { word.append_c(c); } } //List var L = new LinkedList<pair?>( (EqualFunc) equals); // Insert in List (to sort) pair p = pair(); foreach (var item in map.entries) { p.word = item.key; p.freq = item.value; L.add(p); } // Sort list L.sort( (CompareFunc)comp ); // Freq distribution var i = 0; foreach (var item in L) { Posix.printf("(%u,\t '%s')\n", item.freq, item.word); i++; if (i > 10) break; } return 0; } //---------------- _______________________________________________ vala-list mailing list vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list