I'm writing a program in C++ to convert a user-submitted string into a postfix expression and then evaluate it. The function where the string is tokenized into operands, operators and such looks like this:

void Calc::tokenize(char * s){
        cout << s << endl;
        int i = 0;
        char * t = new char[2];
        while (i < strlen(s)){
                *t = *(s+i);
                *(t+1) = '\0';
                cout << t;
                cout << i << endl;
                if (*t == ' '){
                        i++;
                }
                cout << t;
        //other stuff here
}

I determined from putting cout statements in various places that the program segfaults at the if (*t == ' ') line, but I can't understand why. I was having other problems with this code (apparently with managing parentheses at the point of organizing into postfix, I might ask about that later) but this one is suddenly in the way of everything. Any ideas?

Recommended Answers

All 3 Replies

Doesn't seem to be letting me edit the OP now.

Anyway, I'm now getting segfaults at the int i = 0 line. Why would it do that? =/

Member Avatar for r.stiltskin

Hard to tell from the limited amount of code you posted, but
1 - are you sure that the array that you're passing in as s is null-terminated?

2 - t points to an array of only 2 chars. Does s always point to a 2-char array (including the null char)?

1. s was always null terminated as it's designed to take it through cin.
2. doesn't matter, I only take the character at index i from s, and place that in t.

The issue, according to my professor, was that I wasn't flushing cout with endl or flush(cout). So oops.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.