我有点好奇为什么在创建指针类型对象时内存没有分配给类或结构?
例如 :-
class A
{
public:
void show()
{
cout<<" show function "<<endl;
}
};
int main()
{
A *a;
a->show();
return 0;
};
Run Code Online (Sandbox Code Playgroud) 我确切的问题是,有任何规定c,并c++明确指定的值,以特定的地址,例如,假设我要存储20在0x1846010内存中的地址,我也想访问使用相同的地址(值0x1846010).
可能很容易,但如果可以,我真的很困惑如何做到这一点.
任何人都可以解释这是可能的,如果是,那么如何(有适当的例子),如果没有那么为什么?
提前致谢.
之前我问了一个问题,即如果malloc的返回被强制转换,那么将被标记的错误被隐藏
,我得到的答案是:在(较旧的方言)C中,你可以调用一个尚未声明的函数; 隐式声明一个返回类型为的函数int.因此,如果您在malloc()不包含标题的情况下进行调用,则会得到错误地认为它返回的代码int.如果没有强制转换,当您尝试将其分配给指针时,会出现编译器错误.使用强制转换,代码将编译,可能会产生模糊的运行时错误和冗长的调试会话.
据我所知,如果不包含<stdlib.h>头文件编译器,则隐式声明一个返回类型为的函数int.
但我感到困惑的是,根据malloc()创建者定义的函数定义,void *每当我们使用它时它都会返回,但没有<stdlib.h>返回int.那么它的定义如何改变,是编译器隐式改变void *为int *类型,还是有其他原因?
我知道我无法正确解释我的问题,但如果有人理解,请向我解释一下.
我有一些部分的相关代码的异常处理两个C#和Java.
正如我在C#中读到的那样,当发生这种StackOverflowException情况时,最终块将不会被执行,因为堆栈上没有空间来执行任何更多的代码,并且当ExecutionEngineException发生时也不会调用它,这可能是由于调用Environment.FailFast().
在我的下面的代码(C#)中,我故意生成StackOverflowException:
class overflow1
{
public void disp()
{
try
{
Console.WriteLine("disp");
disp();
}
catch(Exception e) {
Console.WriteLine(e);
Console.WriteLine("catch");
}
finally {
Console.WriteLine("finalyyy");
}
}
}
class ExceptionHandling
{
static void Main() {
overflow1 s = new overflow1();
s.disp();
Console.Read();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
DISP
DISP
DISP
.
.
.
由于StackOverFlowException,进程终止
正如我所说,如果StackOverflowException发生,因为堆栈上没有空间甚至执行finally块的更多代码.即使catch块的方法也未被调用,可能是由于相同的原因(堆栈中没有剩余空间).
现在我在java中尝试了相同的代码:
public class ExceptionHandlingTest {
static int …Run Code Online (Sandbox Code Playgroud)