Hello, I didn't express myself when changes were made to the interface of property classes, resulting in the change of string to const char * but now, I experiment many segfault that are a direct result of these changes.
While I totally agree with the fact that input parameters should be const char * to avoid unnecessary memory allocations, I thing that making the same changes to return values such as in getStringValue is a big mistake. Here is why : First, I am trying to build latest CVS flightgear with MSVC6 on Win2k. I am surprised that these problems do not show up with gcc (linux or Win2k) First example : /sim/logging/classes is tied and its getter function is : /** * Get the logging classes. */ static const char * getLoggingClasses () { sgDebugClass classes = logbuf::get_log_classes(); string result = ""; for (int i = 0; log_class_mappings[i].c != SG_UNDEFD; i++) { if ((classes&log_class_mappings[i].c) > 0) { if (!result.empty()) result += '|'; result += log_class_mappings[i].name; } } return result.c_str(); } the string result is a local variable and is not valid when getStringValue returns. Same problem with /sim/time/gmt-string and its getter function (from fg_props.cxx) : /** * Return the GMT as a string. */ static const char * getGMTString () { string out; char buf[16]; struct tm *t = globals->get_time_params()->getGmt(); sprintf(buf, " %.2d:%.2d:%.2d", t->tm_hour, t->tm_min, t->tm_sec); // cout << t << " " << buf << endl; out = buf; return out.c_str(); } Here again the string out is destroyed before the return value has a chance to be copied ! There are tons of similar examples. A quick and dirty fix would be to transform those locals static but with the loss of reentrancy (bye-bye threaded flightgear !) The changes also introduced the need for the caller to allocate a string or to call strcmp that I consider ugly (it's a matter of taste) in C++ programs and that obfus cate the code. The only way to avoid these memory management problems is to return a class that can hold and free its memory. The standard string class can do that, or we can create a new string class that do copy on write with reference counters. I don't want to advocate for a compiler or an other but I am still perplex about the fact that no one noticed these problems with gcc ! Cheers, -Fred _______________________________________________ Flightgear-devel mailing list [EMAIL PROTECTED] http://mail.flightgear.org/mailman/listinfo/flightgear-devel