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?

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.