|
Hi All,
Can anyone tell me where is the memory allocated for a function?. Consider the following example
class A
{
int a;
int b;
void f1();
};
void main()
{
A obj1;
}
Now, in this case, assume that for variable 'a' the address would be 5000 and for 'b' it would be 5004. These 2 varialbes are present in the stack. Now, where does my function lie. Is it placed in the stack? or somewhere else. How do I find the address of the function and know as where it is placed?
can anyone help me on this.
|
|
|
|
|
Take the address of the function. This is a little tricky for member functions. It goes something like this:
class A<br />
{<br />
int a;<br />
int b;<br />
void f1();<br />
};<br />
<br />
void (A::*pAFnPtr)() = &A::f1;<br />
|
|
|
|
|
Right.I can get the address of the function using funtion pointers. It will surely work fine, but I just want to know as where the function is stored. What is the address that I get as the output for the above code snippet that you have given. Is it a stack or some other random memory location or something else?
To the best of my knowledge I feel that functions does not get stored in the stack. Correct me if I am wrong and do let me know your suggestions on this.
Thanks In Advance
|
|
|
|
|
It will be an address within the memory where the loader mapped the .EXE or DLL file. It is not on the stack or the heap. The code above will give the the address of the function (or perhaps a incremental link thunk or an adjustor thunk).
Steve
|
|
|
|
|
Thanks for your information Steve.
|
|
|
|
|
I have an activeX control in a htmal page (say second.htm), when I try to open this page from another htm page (say first.htm) and do some process in ActiveX and close the second.htm. This causes the first.htm also closed. is it due to a crash?
window.open("second.html", "myPage");
What proble forceing the parent page to close?
|
|
|
|
|
If i make a library, consists of two files, for example - foo.h, foo.cpp,
where i described a class foo:
foo.h file:
<br />
class foo<br />
{<br />
...<br />
public:<br />
foo();<br />
void method();<br />
};<br />
<br />
foo.cpp file:<br />
#include "foo.h"<br />
foo::foo()<br />
{<br />
}<br />
foo::method()<br />
{<br />
}<br />
and then i make a new project, copy this files in the project and in file stdafx.h i write next string
#include "foo.h"
the linker says that can't link... What am i doing wrong?
So... I hope i described my problem clearly Sorry for my bad english
-- modified at 1:05 Tuesday 14th February, 2006
|
|
|
|
|
Firstly you're missing a void :
void foo::method()<br />
{<br />
}
I'm not sure about the link error.
Steve
|
|
|
|
|
It is just mistake in forum...
Exactly - i got :
error LNK2001: unresolved external symbol "public: __thiscall CFooClass::~CFooClass(void)" (??1CFooClass@@QAE@XZ)
|
|
|
|
|
It seems as if the destructor (~FooClass()) is present in the .h file, but missing in the cpp file.
Add it to the cpp file.
|
|
|
|
|
|
Looks like like your class has declared a destructor but not defined it. ie:
class CFooClass<br />
{<br />
public:<br />
CFooClass();<br />
~CFooClass();<br />
};<br />
<br />
CFooClass::CFooClass()<br />
{<br />
}<br />
<br />
|
|
|
|
|
Yes, it looks like i don't have a destructor in my cpp file, but i have...
I found a way you can check it - in the wizard you can create a new class, but then delete it from the solution, and include it just in stdafx.h. You'll get the same error as I... So my question is - how to include library, without insertig library in the project
|
|
|
|
|
Are you just including the .H file in your project without the corresponding .CPP file? If this is the case the impementation must come from somewhere...Perhaps you want to build a static library (.LIB file). When you do this you just include the .H file and add the .LIB file to the linker tab (or use a #pragma comment(lib, "libname.lib")).
Steve
|
|
|
|
|
Look at the missing func:
"public: __thiscall CFooClass::~CFooClass(void)"
If it's ment to be a destructor, wouldn't it look like this:
"public: __thiscall CFooClass::~CFooClass()"
That is, without the "void" ?
|
|
|
|
|
Rassul Yunussov wrote: Exactly - i got :error LNK2001: unresolved external symbol "public: __thiscall CFooClass::~CFooClass(void)"
Either you fail to include the .cpp or .library file
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
The question relates only to large projects (defined as >= 100,000 lines of code) compiled with Visual C++ compiler. If you work(ed) on such projects, I would appreciate if you could share your experience. Is it a must in this case? Thanks!
Nick Kisialiou
|
|
|
|
|
every day. What do you need exactely ?
~RaGE();
|
|
|
|
|
Hi,
whats the benifit of using make files instead of the Rebuild option in VS itself.
Is it better/faster on single project solution?
Or is it better/faster on multi project solutions?
I notice that the build option in VS isn't 100% safe (sometimes it doesn't notice changed code)
could a make file help me in this.
codito ergo sum
|
|
|
|
|
I mean exactly what BadKarma says. Have you ever done a large project without command line compiling/linking? Is it worth planning in advance that the project be compiled in command line, possibly later in the development cycle?
|
|
|
|
|
Hi guys im trying to code a recursive function in which you are to find all permutations of a string of 1's and 0's of size N. Well ive been working on this thing for hours now and realized my algorithm for solving this is just wrong.
Ive been using an array of bits yielding 2^N permutations but it seems to be getting messy. I was writing code in which only cattered to small numbers of N like 2 or 3.
Any advice on a basic algorithm on how to deal with all sets of N would help, becuase im really stuck. Thanks in advance!
-Example of whats required-
N = 3
//output
000
001
011
100
101
010
110
111
|
|
|
|
|
Well, if you look at the pattern, you'd find that the permutation of 3 bits is made up of two distinct halves - a '0' followed by the permutation of two bits, and a '1' followed by the permutation of two bits.
Make a function that takes in N and a prefix of the bits already determined as parameters...
void permute(int n, std::string prefix) such that if you call it as permute(2, "0") , it would print all the permutations of 2 bits with a '0' in front of each one.
If you think about it, notice that a permutation of 3 bits is then
permute(2, "0");
permute(2, "1"); and a permutation of 4 bits is
permute(3, "0");
permute(3, "1"); Notice the pattern?
See how you go with this
Ryan "Punctuality is only a virtue for those who aren't smart enough to think of good excuses for being late" John Nichol "Point Of Impact"
|
|
|
|
|
Here's one way:
#include <iostream>
#include <bitset>
using namespace std;
int main(int argc, char* argv[])
{
enum
{
NumberOfBits = 7
};
typedef unsigned int NumType;
typedef bitset<NumberOfBits> BitSetType;
for (NumType i=0; i<(1<<NumberOfBits); ++i )
{
cout << BitSetType(i) << endl;
}
return 0;
}
This will only work for 32 bits of less (number of bits in unsigned int). Assumes 8 bits pre char.
Steve
|
|
|
|
|
A really easy way to do this would be to increment an integer on every permutation and convert that integer into a binary string. The downside is that N can't be >= than the number of bits in the integer.
const int N = 8;
long maxPermutations = 2 << N;
long permutation;
for (permutation = 0; permutation < maxPermutations; permutation++)
{
}
|
|
|
|
|
Hello everyone!
Does anyone know of an Assembler function that works kind of like Kernel32.dll 's Beep() function? (The NT-family version, please. ) I want it to be an easy-to-use function which I can embed into C, because I don't feel ready to mess with the Assembly yet... Anyone know? Thanks!
P.S: Preferably, it needs to work on DOS...
Lord Kixdemp
www.SulfurMidis.com
www.SulfurSoft.tk
[ftp://][http://][hotline://]tsfc.ath.cx
|
|
|
|