C++ :: Partly Recompilation Generates Invalid Address Fault?
Jun 1, 2013
I'm making an x86 emulator with C++ (currently 8086/80186 with some little unfound errors). When I'm compiling all the files (deleting all *.o files and running make), the emulator runs fine (still some errors, but it runs). When I run make, just having one file adjusted, the emulator (JPCSP, a PSP emulator) gives me an invalid opcode/address fault. The emulator does use some pointers at different places though (mostly dynamic memory and optimization), can this be the cause? Causing addressing errors with partial recompilation using make?
I need to take info in the following format (no blank/skipped lines):
last name, first name street address city, state zip code
And dynamically allocate space for it. I need to use structs, and I need to use an array of pointers to structs to point to them. I know I probably have quite a few problems with my code, but so far, I am able to store and print back the data without issue. In the following code, I only make the loop run 3 times just so I can test it with manual input into the console, but eventually the max will be 50, or until end of input (will be doing IO redirection with a txt file).
Like I said, I can store and print the data fine, but am getting a segmentation fault when trying to sort the info.
Write a C/C++ program that reads a boolean expression in sum-of-products form and generates the sum-of-minterms form (canonical form). Use single letter to represent variables. The following symbols will be used to represent operators: NOT: ~, AND: *, OR: +. Other operators won't be used.
Examples of execution: number of variables: 2 SOP expression: ~A+B output: ~A*~B + ~A*B + A*B
The user thinks of a number from 0 to 100 and the program tries to guess it. The problem is, I'm new to random numbers and use a function to generate them that isn't my own. It generates the same numbers each time the program runs, here are screen shots:
Run 1: [URL] .....
Run 2: [URL] .....
I read something about seeding or something, if I need it, must don't give me the answer. If you have the liberty of time explain more to me about the random business.
Here is my code:
#include <iostream> #include <cstdlib> #include <iomanip> #include <unistd.h> #include <string> #include <ctime> using namespace std; int rand_lim(int limit) {
I need to write a C function that generates a random character array (i.e. string) of uppercase letters - getchar and putchar are the only IO functions that I can use. Below is what I have already - I am iterating for as many times as I am required to, and am modulating rand() by 25, (total letters in the alphabet). I'm trying to see how to get the random letter from the % 25, and also how to do this without toupper() [not sure if I can use that function].
void getRandomStr()){ char str[40]; for (int i = 0; i < 40; i++){ char c = rand() % 25); str[i] = toupper(c); }}
Below is a program that generates random Addition for Subtraction problems depending on the user's choice. The user is prompted to input an answer and then it keeps your score. If you want to quit you just press zero.
Code: #include <iostream> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <iomanip> #include <string> using namespace std; int menu(); bool addition(int &reward); // function to return truth values
After looking online for a string replace function in C and finding so many examples that go through the entire string twice. First round to find how number of occurances of substitute in string, using that to malloc for a new string to include additional space for replace, then going through the search string again to get all but what's to be substituted out. I feel it's kind of silly to go through the string twice. Therefore, I'm trying to implement my own string replace, that only searches through the string for what's to be substituted, once.
Here is the same code, but with execution + some syntax highlighting: Ideone.com | Online C Compiler & Debugging Tool..It works great, until it gets to grabbing whatever remains in the search string after the last found sub. The realloc throws a runtime error:
Aborted From my understanding, this is from me going outside of the bounds of the heap and using memory I haven't allocated, or using a free'd pointer. I'm not seeing where either of these are happening in my code, and was wondering what the best way to go about figuring out where the error exactly occurs.
The exercise consists on 3 procedures. We get the information from a .txt like these:
01/03/2011 A 02/03/2011 F 03/03/2011 C 04/03/2011 T (...)
Simulating a Videoclub database where the letters stand for the type of movie (A=Action, T=Terror, C=Comedy, ...) and the dates they were rented.
a) How many movies from one specific genre have been rented more than 'n' times? The genre and the value 'n' must be entered by the user.
b) How many movies and which genres belong to a certain date? The date must be entered by the user.
c) Print a list that shows the number of times a movie from each genre has been rented.
So far this is what I've got:
Code: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100
typedef struct { int dia,mes, any; char genere;
[Code] ....
But right now, my main problem is that I can't even debug because i get an error in line 97 --> while (llista[i][j] != EOF) <-- saying "invalid operands to binary != (have 'lloguer' and 'int').
I've tried to cast (int) before "llista[i][j]" but it says that I'm already supposed to get an integer from that.
I catch an exception and want to log it on the console. This works as exepcted, but Valgrind shows me a set of invalid reads.
Here the code of the catch-block:
} catch(HGL::IOException &e) { logError(e); }
The signature of the logDebug is: BasicLogger &operator<<(const std::exception &e);
Now valgrind shows me 4 errors like that:
==20943== Invalid read of size 1 ==20943== at 0x402C658: strlen (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) ==20943== by 0x41554DD: std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& std::operator<< <wchar_t, std::char_traits<wchar_t> >(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
[Code] .....
Generally I dislike invalid read in my code, even if they are harmless like in that case.
If I don't pass a reference, but a copy of the exception, I don't get this invalid reads, but also loose all information, because of the implicit upcasting.
Why I get the illegal read, resp. why std::wstring is deleting it on the way to the <<-operator?
Basically the whole purpose of this program is to prompt the user to use a calculator. Choices 1-6 are valid, but I want to set it up where selecting any other number outside of 1-6 to be Invalid, and will display an 'Invalid Choice' message, and then go back to the main menu.... The main program does work properly, it's the 'Invalid' setup that is giving me problems
Code:
#include <iostream> #include <iomanip> using namespace std;
I wanna know why the program doesnt show "Invalid Letter Entered" when i enter any letter other than A S D or M
//Processing the data if (letter== 'A'||'S'||'M'||'D')// checking Add, subtract, multiply or divide { if (letter== 'A')//Adding the integers cout<<"Adding two integers = "<<first + second<<endl; else if (letter== 'S')//Subtracting the integers {
I made a program and when I try to use the main driver to instantiate everything it says invalid storage class for a function. All of my code is in 4 separate files i'm just trying to get it to run now.
I am getting this error invalid use of non static data member.my code looks something like this: i have a main.cpp and 2 class files with respective .h files, say one class file is named human (so i have human.cpp and human.h) and stats (so i have stats.cpp and stats.h) in my stats.h file, i have a double array: double HumanF[10][12] with everything filled in.then in my human.h file i just have a bunch of integers. human.cpp has formulas in it that use numbers from the double array i mentioned. for example
Human::Human() { constant (this is a double i made in human.h) = (1+Stats::HumanF[0][0]); i (another double) = pow(constant, ylvl); (ylvl is also an int I made in my header file) yhp = i*137; }
The error is : invalid initialization of reference of type 'ArrayT<float>&' from expression of type 'const Arrat<float>'...The above errors occur when I tried to do the following code , with operator* overloading :
const ArrayT<float>& b1 = A*A; ArrayT<float>& c2 = b1*A;// <---- this line makes the error //b1 is a const ref of ArrayT<float> //A is just a normal object of ArrayT<float> created by ArrayT<float> A(blah,blah,blah);
The following are the list of operator* overloading :
template <class T> ArrayT<T>& ArrayT<T>::operator*(ArrayT<T>& b) {blah,blah,blah} template <class T> const ArrayT<T>& ArrayT<T>::operator*(ArrayT<T>& b) const
[code]....
I want to use for error multiplication above, but not success.
I've created a class that works with vectors doing various calculations and what not. I have overloaded operators that I've created outside of the main in separate header and class files. Ive tested them and the overloaded operators work correctly when I paste them into a the main file but when I have them defined in the other class files and I try to access them in the main class I get an error saying invalid operands to a binary expression. I also have other classes with overloaded operators that work just fine in the main class so I'm not sure what I did wrong here?
This is how I have my header set up, the definitions to these are in a separate class file which I don't think I need to include considering I have them tested and working so I don't think that's the problem (correct me if I'm wrong).
#include "Name of vector class" int main(){ vector<float> vR, v1, v2; v1.push_back('some value'); ... v2.push_back('some value'); ... vR = v1 + v2; // Invalid operands here return 0; }
And like I said, I have other classes with overloaded operators set up the same way which work fine being implemented the way I have these, so I'm not sure where the problem is at.
I am using visual studio 2012 on windows 7. but, when I have compiled my programs and run them on an older pc to test out its functions, I receive an error saying that the program is not a "valid win32 application." I have even tested this with a very simple hello world console application, but the problem still remains. Where is the error coming from? is the application corrupted during transport? (upload to internet) or are programs compiled on win 7 incompatible with win xp
The compiler keeps on telling me that invalid conversion from wxBitmap* to wxString on the line with the AddTool function, whiles I do not even try to do such an ambiguous typecast.
wxWidgets 2.9.4 MinGW gdb
Code:
#include "mainwnd.h" //namespaces
//other definitions and declarations CMAINWND::CMAINWND(const wxString& szTitle):wxFrame(NULL,wxID_ANY,szTitle) { wxImage::AddHandler(new wxBMPHandler);
I am trying to run a void function and pass parameters to it on a thread using std::thread. However, I keep getting compile errors. When I can get it to compile it does not create the file. Here is my code: