input/output trouble cause segmentation fault

eric fsshl at att.net
Wed Jul 13 06:00:19 UTC 2011


thanks your quick reply
but that's I tried
result is segmentation fault
which is not what book predict(or what program will follow)
as you can see, it should response another cout
"Enter some more strings: ";
but it never reach there.
that's what I need you(or any advanced c/g++/linux/ubuntu programers'
help.

On Wed, 2011-07-13 at 13:50 +0800, Ace wrote:
> Unlike Windows, GNU/Linux use ^D instead of ^Z .
> 
> On 13 July 2011 13:48, eric <fsshl at att.net> wrote:
>         Dear advanced c/g++ programers:
>         
>          A program request me to enter twice input
>         that program probably is tested good on visual c++ 7.1 on
>         window xp,
>         but my system is g++ on linux(Ubuntu10.04)
>         It assume
>         Enter some strings: a b c d
>         ^Z
>         Enter some more strings: d e f g
>         ^Z
>         Union: a b c d e f g
>         Difference: a b c
>         Intersection: d
>         all these you can get from page 273 and 274 of book(c++
>         cookbook)
>         
>         but my test result is
>         -------------------------------
>         eric at eric-laptop:~/cppcookbook/ch7$ ./a.out
>         Enter a series of strings: a b c d
>         ^Z
>         [7]+  Stopped                 ./a.out
>         eric at eric-laptop:~/cppcookbook/ch7$ ./a.out
>         Enter a series of strings: a b c d
>         {a, b, c, d}
>         Segmentation fault
>         -------------------------------------------------------------------
>         second case , I used <Enter><Control-D>
>         first case, I used <Enter><Control-Z>
>         
>         the following is the program I tested, you still can download
>         from
>         http://examples.oreilly.com/9780596007614/
>         ------------------------------------------------------------------------------------------------
>         // Example 7-8.  Unsing set operations
>         #include <iostream>
>         #include <algorithm>
>         #include <string>
>         #include <set>
>         #include <iterator>
>         #include "utils.h"      // For parintContainer(): see 7.10
>         
>         using namespace std;
>         
>         int main() {
>         
>          cout << "Enter some strings: "
>          istream_iterator<string> start(cin);
>          istream_iterator<string> end;
>          set<string> s1(start, end);
>         
>          cin.clear();
>         
>          cout << "Enter some more strings: ";
>          set<string> s2(++start, end);
>         
>          set<string> setUnion;
>          set<string> setInter;
>          set<string> setDiff;
>         
>          set_union(s1.begin(), s1.end(),
>                    s2,begin(), s2.end(),
>                    inserter(setUnion, setUnion.begin()));
>         
>          set_difference(s1.begin(), s1.end(),
>                         s2.begin(), s2.end(),
>                         inserter(setDiff, setDiff.begin()));
>         
>          cout << "Union:\n";
>          printContainer(setUnion);
>          cout << "Difference:\n";
>          printContainer(setDiff);
>          cout << "Intersection:\n";
>          printContainer(setinter);
>         }
>         --------------------------------------------------------------------------------------------------
>         utils.h
>         -------------------------------
>         // Example 7-12. Writing your own printing function
>         #include <iostream>
>         #include <string>
>         #include <algorithm>
>         #include <iterator>
>         #include <vector>
>         
>         using namespace std;
>         
>         template<typename C>
>         void printContainer(const C& c, char delim = ',', ostream& out
>         = cout)
>         {
>           printRange(c.begin(), c.end(), delim, out);
>         }
>         
>         template<typename Fwd>
>         void printRange(Fwd first, Fwd last, char delim = ',',
>         ostream& out =
>         cout) {
>           out << "{";
>           while (first != last) {
>             out << *first;
>             if (++first != last)
>                out << delim << ' ';
>           }
>           out << "}" << endl;
>         }
>         ------------------------------------------------------------------------------------------------------------------
>         Ned and thanks your help a lot in advance
>         Eric
>         
>         
>         
>         --
>         Ubuntu-devel-discuss mailing list
>         Ubuntu-devel-discuss at lists.ubuntu.com
>         Modify settings or unsubscribe at:
>         https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-discuss
> 
> 
> 
> -- 
> ========================================================
> DaoKuan Ma (Ace)                                                
> Software Group of CIPPUS-Center of Innovation & Practice.
>   
> 
> ADD:     Software School of Dalian University of Technology.
> TEL:      +86-186-0984-1079.
> 
> BLOG:    http://t.matong.me
> EMAIL:  madaokuan at gmail.com  goace at acm.org
> ------
> CONTACT ME:                 
> 






More information about the Ubuntu-devel-discuss mailing list