input/output trouble cause segmentation fault

eric fsshl at att.net
Wed Jul 13 05:48:23 UTC 2011


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






More information about the Ubuntu-devel-discuss mailing list