[Solved]Program exited with code 0
-
wrote on 15 Nov 2012, 06:42 last edited by
Hi,
I am new to Qt. I am using Qtcreator version 4.6.2, in linux.
The main theme of my project is to prepare a question bank.
In that, through the editor i am entering the various options (i.e fill,choose,match,short ques,and long ques).
While entering through editor, the .xml file first generate and from that xml file it will enter the database.
In that the i’m having problem in entering short ques and long ques into the database.
While entering the Question and Answer,it generates the xml file bt nt enter to the database, and get exit from the editor showing the following.@
ASSERT: “i >= 0” in file /usr/include/qt4/QtCore/qstring.h, line 875
The program has unexpectedly finished.
/home/tts/Desktop/QbankEditorAllrequirement/qbank exited with code 0
@
please help me to solve this. -
wrote on 15 Nov 2012, 07:02 last edited by
Your index to operator[] is invalid (< 0).
-
wrote on 15 Nov 2012, 07:05 last edited by
sorry to ask might be a silly Question.
What "index to operator[] is invalid (< 0)" this mean -
wrote on 15 Nov 2012, 07:17 last edited by
This means that you are trying to make something like this:
@
QVector<int> vec;
vec[-1] = 0;
@ -
wrote on 15 Nov 2012, 07:23 last edited by
ya, in my code it is returning the index value "index=-1". so it is exiting.
It should not return the "-1". I am trying to solve, bt i dont know how to solve this. please help me -
wrote on 15 Nov 2012, 07:26 last edited by
- Find error in your code
or/and - Check for correctness your index @(index >= 0 && index < vec.size())@ before operator[]
if (index == -1) is an exit condition - just exit from your app :-))
- Find error in your code
-
wrote on 15 Nov 2012, 07:56 last edited by
The index is initialized to '0'.
Some formats are there to enter the Question and Answers in Database, through editor.
While the Question is entered the parseQuestion function is called.
While the Answer is entered the parseOption function is called.
In the parseOption function, the condition is checked. The function includes the index,option,stmt,phrase .
The phrase is the one entered within the '| ' (eg |Lotus\ is our national flower) In this eg to highlight "Lotus" we are using the '| ' symbol.
In the above eg Lotus is the phrase, if any stmt seen before the phrase is considered as stmt1,and after the phrase is the stmt2.I give another eg.
If i am entering a Ques and Ans like this
What is Qt?
Qt is a |cross platform application framework
Qt is a is the stmt1
*|cross platform application framework* is the phraseWhile running with above eg my code runs fine and every thing enters into the database.
But when i am entering like this
What is Qt?
Qt is a |cross platform application framework\ .
Qt is a is the stmt1
*|cross platform application framework* is the phrase
.. is considered as the stmt2 and returns the index value as '-1' since there is no '|'
The following is the condition it checks for the stmt2, and no '|' is seen so returning '-1'until for stmt1 amd the phrase it reads the index value as +ve value only.
bt when reading the stmt2 it is returning '-1'.@
while(option[index] != '|')
{
stmt1[j] = option[index];
cout<<"stmt1[j]\n"<<stmt1<<endl;
if(option[index]=='\0')
{
stmt1[j] = '\0';
option[0] = '\0';
return -1; //here it returns '-1'
}
index++;
j++;
}
@ -
wrote on 15 Nov 2012, 08:13 last edited by
You should check for '|' and NOT '\0'.
E.g.:
@
while(option[index] != '|' &&
option[index] != '\0')
@ -
wrote on 15 Nov 2012, 09:04 last edited by
I used some cout stmts to check wat the option of index is.
The option[index] is printing as the "|" symbol.
After the stmt1 the "|" is seen and return the option[index] as "|" and returning the index value as +ve value.
Then when coming to the stmt2 it checks the condition, "|" . The condition is not get satisfied returning "-1".And I also tried wat u said,
@
1.
while(option[index] != '|' &&
2.
option[index] != '\0')
@
It is not taking the phrase value,only it reads the stmt1, and exit from the editor. -
wrote on 15 Nov 2012, 09:06 last edited by
try to add you check
@
if(option[index]=='\0')
{
stmt1[j] = '\0';
option[0] = '\0';
return -1; //here it returns '-1'
}
@after the loop if you want to exit with code -1.
Why are you using this loop instead of "QString::indexOf":http://qt-project.org/doc/qt-4.8/qstring.html#indexOf
-
wrote on 15 Nov 2012, 09:16 last edited by
Ya i checked by adding the "if" after the loop.
But it doesn't exit from the loop, runs until i stop the execution. -
wrote on 15 Nov 2012, 09:18 last edited by
- Is option a QString?
- Is option ends with '\0'?
If 1 and 2 are true than this loop shouldn't be infinite.
-
wrote on 15 Nov 2012, 09:30 last edited by
ya the option is QString only.
You asked me to check the "if" by adding it after the loop. By adding it after the loop only becomes infinite. -
wrote on 15 Nov 2012, 09:39 last edited by
Should this help?
@
int pos1 = option.indexOf('|');
if (pos1 != -1)
{
stmt1 = option.left(pos1);int pos2 = option.indexOf('\\', pos1); if (pos2 != -1) { phrase = option.mid(pos1, pos2 - pos1); }
else
{
// there is no '|' symbol in option
}
@ -
wrote on 15 Nov 2012, 10:11 last edited by
Ya i tried tis by replacing tat, bt it is still the same not exiting from the loop, also printing the stmt as null.
-
wrote on 15 Nov 2012, 10:25 last edited by
You shouldn't use a single backslash in option string, because it will be processed as '.' in second case.
So, before processing, replace single backslashes with doubled or select another symbol -
wrote on 15 Nov 2012, 10:33 last edited by
This means whether you are asking me to use double backslash in the phrase itself or at the end of last stmt i've to put double backslash.
-
wrote on 15 Nov 2012, 11:23 last edited by
By trying with this code,
@
1.int pos1 = option.indexOf('|');
2.if (pos1 != -1)
3. {
4. stmt1 = option.left(pos1);
5. int pos2 = option.indexOf('\', pos1);
7. if (pos2 != -1)
8. {
9. phrase = option.mid(pos1, pos2 - pos1);
10 }
11. else
12. {
13. // there is no '|' symbol in option
14. }
@
I am getting this error "commitdb.cpp:1219: error: a function-definition is not allowed here before ‘{’ token" in some other functions.
so i removed this code and compile with the the original code itself.@@ -
wrote on 15 Nov 2012, 12:08 last edited by
add } before else
-
wrote on 15 Nov 2012, 12:23 last edited by
Ya i added }
Now it is not exiting from the editor and its working.
But, the question is entering into database finely, the answer is not entering to the database (i.e options) printing the null values for option,stmt1 and stmt2 . Also the null values are entering to database more than once
1/49