小编Sat*_*bir的帖子

Cast中C++中Delete的行为

我正在研究一些奇怪的代码,对我而言,这不是一段很好的代码.

PIP_ADAPTER_INFO pAdapterInfo=(PIP_ADAPTER_INFO)new  
                               char[sizeof(IP_IP_ADAPTER_INFO)];

.
.
.
delete []pAdapterInfo;
Run Code Online (Sandbox Code Playgroud)

这里PIP_ADAPTER_INFO是指向struct IP_IP_ADAPTER_INFO的指针,IP_IP_ADAPTER_INFO的大小是640.

我期待在delete [] pAdapterInfo调用中崩溃.但是没有崩溃.我写了一个小测试代码.

        class TestClass
        {

        public:
        /*  TestClass()
            {
            }
            ~TestClass()
            {
            }*/

        public:
            int array[10];
        };

        int main (int ac, char **av)

        {
            TestClass *myptr=(TestClass*) new char[10];
            delete []myptr;
            return 0;
        }
Run Code Online (Sandbox Code Playgroud)

我所看到的 :

  1. 如果我取消对c'tor和d'tor的评论,测试代码崩溃(断言失败)
  2. 如果我保持评论没有失败.

即使我看到反汇编,但在上述两种情况下都是不同的

/*****************************************************************/
/********Compiler provided c'tor and d'tor ***********************/
/*****************************************************************/
28:       TestClass *myptr=(TestClass*) new char[10];
00401268   push        0Ah
0040126A   call        operator new (004082d0)
0040126F   add         esp,4
00401272   mov         dword ptr [ebp-8],eax
00401275 …
Run Code Online (Sandbox Code Playgroud)

c++ delete-operator

2
推荐指数
1
解决办法
1026
查看次数

C#中字符串的行为

我是一名C++程序员,现在正在开发一个C#项目.

我试图在下面的片段中理解为什么即使函数正在改变它的值,字符串的值也不会改变,我认为它是一个对象并将作为参考传递.

public class TestClass
    {
        public TestClass(String passedStr)
        {
            passedStr = "Change me";
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            String aString="I am what i am";
            TestClass obj = new TestClass(aString);
            Console.WriteLine(aString);

        }
    }
Run Code Online (Sandbox Code Playgroud)

但是用户定义的类的行为是不同的.

 public class TestClass
    {
        private int x;
        public int ID
        {
            get
            {
                return x;
            }
            set
            {
                x = value;
            }
        }
        public TestClass(int a)
        {
            x = a;
        }
    }
    public class Tester
    {
        public Tester(TestClass obj)
        {
            obj.ID …
Run Code Online (Sandbox Code Playgroud)

c#

2
推荐指数
2
解决办法
219
查看次数

catch(...)实际上是否捕获了所有异常?

我看到catch(...)没有捕获所有异常,并且在最终用户上抛出恼人的pop.

size_t pos;
char *ptrDir="c:\\test";
std::string strDir = 
strDir.erase(strlen(ptrDir) - 1);
pos = strDir.find("Test");
try
{
    std::string strPat = strDir.substr(pos);
}
catch(...)
{
    std::cout<<"I am hiding Exception";
}
Run Code Online (Sandbox Code Playgroud)

我使用的是Visual Studio 2005,Windows XP.

注意:代码是故意生成异常.这是一个测试代码

c++ windows stl visual-studio

2
推荐指数
1
解决办法
200
查看次数

DateTime从具有指定格式的String解析

我正在尝试从中提取日期时间信息

"2012/04/03 10:06:21:611747"
Run Code Online (Sandbox Code Playgroud)

使用格式

String dateformat = @"yyyy/mm/dd hh:mm:ss:ffffff";
Run Code Online (Sandbox Code Playgroud)

获得例外 - 任何帮助表示赞赏.

完整代码

 String dateformat = @"yyyy/mm/dd hh:mm:ss:ffffff";
 readonly CultureInfo _provider = CultureInfo.InvariantCulture;
 DateTime dateTime = DateTime.ParseExact(line, dateformat, _provider);
Run Code Online (Sandbox Code Playgroud)

.net c#

1
推荐指数
2
解决办法
1579
查看次数

标签 统计

c# ×2

c++ ×2

.net ×1

delete-operator ×1

stl ×1

visual-studio ×1

windows ×1