+ 3

Unexpected error in C++ Code Playground...

I was trying to compile a code of mine, but for the first time, received the following as the output: """ The application has requested runtime to terminate it in an unusual way. Please contact the application support team for more information. what() : basic_string_S_create. """ I haven't even used try{} anywhere. And on CodeBlocks, the same code returns: ||=== Build finished: 0 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===| How am I to correct my code? Is this due to some error in my code or some Code playground Secret? Here is the code : https://code.sololearn.com/cTeO3C6896xL/?ref=app

5th Oct 2017, 12:43 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
11 Answers
+ 2
Yea, I notice the bug isn't there when I enter it on different lines, sometimes. Nevertheless you should have checks in place for these types of things ( check out assert ). And you should really take the strings as const string&, so you don't make copies. Sure, 100000! factorial may have alot of digits, but you're not gonna need factorials every time you run the program, but still you waste the space for it. You should allocate more whenever you need more.
5th Oct 2017, 2:29 PM
Dennis
Dennis - avatar
+ 2
I'm not gonna read through the entire thing, but allocating 1000000, really? Anyway, I placed cerr << __FUNCTION__ << endl; At the start of every function and it displayed this: main BigInt BigInt BigInt operator>> Assign operator>> Assign --This is where the crash occurs. The obvious first check, when I saw b.erase(b.begin()); was checking is b was empty, and of course b was empty which caused you to erase at an invalid location and you got a crash. Have fun
5th Oct 2017, 2:11 PM
Dennis
Dennis - avatar
+ 2
@Dennis Ill improve the class functions. Thank You! Im thinking of changing the short array to a string or a vector, as it will allocate memory on their own. Isn't that better to do?
5th Oct 2017, 2:30 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 2
If you don't know this one yet, https://mattmccutchen.net/bigint/ then you should download it and read through the source code. I like the way that numbers aren't stored per digit, but as whole numbers in an array, which makes things alot more efficient.
5th Oct 2017, 2:34 PM
Dennis
Dennis - avatar
+ 2
@Kinshuk Vasisht Yes, you're right, I would recommend the vector. Or if you feel like practicing you could just make it yourself as well :D Check out unique_ptrs if you are.
5th Oct 2017, 2:42 PM
Dennis
Dennis - avatar
+ 2
@Dennis So he moves to the next element only when the first element becomes greater than the limit it can allocate? Thats quite memory efficient. Ill have to work more on this to improve it...
5th Oct 2017, 2:47 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 1
@Dennis Ill revisit those. But, b isn't empty. Im using b.erase(b.begin()) to erase the first character from the string, if its a -. How can I do that correctly if this way is wrong? Save a substring from second character to end? But why does it run fine on a PC? //I got 'No' Error there...
5th Oct 2017, 2:13 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 1
Give me an input that should work for you, I'll try again. You just got unlucky on pc I guess. I mean, having a bug and it not causing a crash is probably one of the worst things.
5th Oct 2017, 2:16 PM
Dennis
Dennis - avatar
+ 1
@Dennis Almost any input works on PC. Eg = 10000000000000000000000000000 / 27 or 503784849937 * 446 or 68389478297489399237849 - 78488484 or 874848849 + 874736277 etc.
5th Oct 2017, 2:18 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 1
@Dennis I admit, 1000000 is large, but 100000! has around 425076 digits...
5th Oct 2017, 2:20 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar
+ 1
@Dennis And sometimes, the program 'is' running correctly even on Sololearn. Eg = Try : 1000 / 2
5th Oct 2017, 2:23 PM
Solo Wanderer 4315
Solo Wanderer 4315 - avatar