小编Vin*_*inz的帖子

整数溢出是否会因内存损坏而导致未定义的行为?

我最近读到C和C++中的带符号整数溢出会导致未定义的行为:

如果在评估表达式期间,结果未在数学上定义或未在其类型的可表示值范围内,则行为未定义.

我目前正试图了解这里未定义行为的原因.我认为这里发生了未定义的行为,因为当整数变得太大而无法适应底层类型时,整数开始操纵自身周围的内存.

所以我决定在Visual Studio 2015中编写一个小测试程序,用以下代码测试该理论:

#include <stdio.h>
#include <limits.h>

struct TestStruct
{
    char pad1[50];
    int testVal;
    char pad2[50];
};

int main()
{
    TestStruct test;
    memset(&test, 0, sizeof(test));

    for (test.testVal = 0; ; test.testVal++)
    {
        if (test.testVal == INT_MAX)
            printf("Overflowing\r\n");
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在这里使用了一个结构来防止Visual Studio在调试模式下的任何保护问题,比如堆栈变量的临时填充等等.无限循环应该导致几次溢出test.testVal,确实如此,除了溢出本身之外没有任何后果.

我在运行溢出测试时查看了内存转储,结果如下(test.testVal内存地址为0x001CFAFC):

0x001CFAE5  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x001CFAFC  94 53 …
Run Code Online (Sandbox Code Playgroud)

c c++ x86 integer-overflow undefined-behavior

47
推荐指数
5
解决办法
4572
查看次数

使用Unicode字符串文字对String进行字符串化

我正在使用这个预处理器宏来"字符串化"并从定义解析函数中轻松返回:

#define STRINGIFY_RETURN(x) case x:     return #x ""
Run Code Online (Sandbox Code Playgroud)

它就像MBSC环境中的魅力一样,具有正常的字符串文字.例:

#define MY_DEFINE_1 1
#define MY_DEFINE_2 2
#define MY_DEFINE_3 3

const char* GetMyDefineNameA(unsigned int value)
{
    switch(value)
    {
        STRINGIFY_RETURN(MY_DEFINE_1);
        STRINGIFY_RETURN(MY_DEFINE_2);
        STRINGIFY_RETURN(MY_DEFINE_3);
        default:    return "Unknown";
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我不得不越来越多地切换到Unicode兼容性,所以我不得不重写这个函数来返回Unicode字符串,这需要L在字符串文字前加前缀.所以我尝试过:

#define STRINGIFY_RETURN_WIDE(x)    case x:     return #x L""

const wchar_t* GetMyDefineNameW(unsigned int value)
{
    switch(value)
    {
        STRINGIFY_RETURN_WIDE(MY_DEFINE_1);
        STRINGIFY_RETURN_WIDE(MY_DEFINE_2);
        STRINGIFY_RETURN_WIDE(MY_DEFINE_3);
        default:    return L"Unknown";
    }
}
Run Code Online (Sandbox Code Playgroud)

但这给了我错误:

错误C2308:连接不匹配的字符串

错误C2440:'return':无法从'const char [12]'转换为'const wchar_t*

我也尝试过:

#define STRINGIFY_RETURN_WIDE(x)    case x:     return L #x ""
#define STRINGIFY_RETURN_WIDE(x)    case x:     return …
Run Code Online (Sandbox Code Playgroud)

c c++ macros stringification c-preprocessor

9
推荐指数
1
解决办法
1837
查看次数

类成员变为未定义

我是TypeScript的新手,目前遇到一个奇怪的问题。当文档准备好时,我使用JQuery创建主类的实例。

var main: MainApp;
$(document).ready(function () {
   main = new MainApp();
});
Run Code Online (Sandbox Code Playgroud)

简化的MainApp类:

class MainApp {
   // Helper Objects
   net: AppNetworking;
   urlHelper: UrlHelper;
   cat: Category;

   // Construction
   constructor() {
      this.net = new AppNetworking();
      this.urlHelper = new UrlHelper();
   }

   // Ajax Callback with Data needed to initialize the "cat" object
   private AjaxCallback(categoryData){
      this.cat = new Category(categoryData);
   }

   // Event Handler for an HTML-Element
   // As it would be called anonymously in JS I decided to make it a static …
Run Code Online (Sandbox Code Playgroud)

class member undefined typeerror typescript

5
推荐指数
1
解决办法
8116
查看次数

为子Windows指定窗口过程

我想知道是否可以为创建的子窗口指定WndProc CreateWindowEx.

我已经创建了一个Window类,主窗口,窗口过程和一个消息循环.该代码有效,我决定将其保留,以便明确我的问题.

到目前为止,这是我的Window Proc:

LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        // Creation of the Win32 Window
        case WM_CREATE:
            // Add an Edit Field
            CreateWindowEx(
                WS_EX_CLIENTEDGE,
                "EDIT",
                "",
                WS_CHILD | WS_VISIBLE,
                5, 5, 200, 24,
                hwnd,
                (HMENU)100,
                g_Instance, // Comming from WinMain
                NULL
            );
            return DefWindowProc(hwnd, uMsg, lParam, wParam);
        case WM_KEYDOWN:
            // Track key presses on the edit field
            std::cout << "The key with the code " << wParam << " …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi wndproc createwindowex

5
推荐指数
1
解决办法
2833
查看次数

设置INetFwRule的字符串成员时,值超出范围异常

我正在尝试为TCP端口1433添加防火墙规则,使用NetFwTypeLib库的特定组.但是将端口添加到LocalPorts变量中作为整数转换为字符串或仅作为简单的"1433"字符串,返回值超出范围异常.删除端口,只使用所有端口工作正常.

这是我使用的代码:

bool CreateRule(string sName, string sPort, NET_FW_IP_PROTOCOL_ ProtocolType, string sIpAdress, string sGroup = "")
{
    try
    {
        INetFwRule firewallRule = (INetFwRule)Activator.CreateInstance(Type.GetTypeFromProgID("HNetCfg.FWRule"));

        firewallRule.Action = NET_FW_ACTION_.NET_FW_ACTION_ALLOW;
        firewallRule.Description = "Used to allow Server access.";
        firewallRule.Direction = NET_FW_RULE_DIRECTION_.NET_FW_RULE_DIR_IN;
        firewallRule.Enabled = true;
        firewallRule.Name = sName;
        firewallRule.Grouping = sGroup;
        firewallRule.LocalPorts = sPort; // "1433" causes out of range exception
        firewallRule.RemoteAddresses = sIpAdress;
        firewallRule.Protocol = (int)ProtocolType;

        INetFwPolicy2 firewallPolicy = (INetFwPolicy2)Activator.CreateInstance(
            Type.GetTypeFromProgID("HNetCfg.FwPolicy2"));
        firewallPolicy.Rules.Add(firewallRule);

        return true;
    }
    catch
    {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

设置firewallRule.LocalPorts成员会导致异常.有人知道出了什么问题吗?

c# firewall exception

5
推荐指数
1
解决办法
1059
查看次数

将ATL CString转换为字符数组

我想把a转换CString成a char[].有人告诉我怎么做?

我的代码是这样的:

CString strCamIP1 = _T("");
char g_acCameraip[16][17];
strCamIP1 = theApp.GetProfileString(strSection, _T("IP1"), NULL);
g_acCameraip[0] = strCamIP1;
Run Code Online (Sandbox Code Playgroud)

c++ c-strings char visual-c++

4
推荐指数
3
解决办法
6万
查看次数

如何在JavaScript(JQuery)中构建"大"div结构?

我需要制作大型DIV结构并将它们附加到包装器上.但到目前为止我所看到的总是将一个 DIV元素附加到另一个元素中.

有一个空的DIV-Wrapper,用"大"DIV-Elements填充

<div class="PostWrapper">
    // Content should be added to here
</div>
Run Code Online (Sandbox Code Playgroud)

我希望附加的DIV-Elements PostWrapper看起来像这样:

<div class="Post">
    <div class="PostHead">
         <span class="profilePicture">
             <img src="../Profiles/Tom.jpg" />
         </span>
         <span class="userName">Tom</span>
         <span class="postTime">10 minutes ago</span>
    </div>
    <div class="PostBody">
        <p>Hey Tom, great work at the presentation last week. Well done!</p>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

所以这是一个DIV-Structure的例子,我想构建并存储在一个javascript变量中,并附加到我的包装器,如:

var postElement = $("div", {class: "Post"}).append("div", {class: "PostHead"}).append("div", {class: "PostBody"})......
Run Code Online (Sandbox Code Playgroud)

这不会像预期的那样工作.但是,如果没有过于复杂的代码,我无法想到一个简单的方法.

怎么可能呢?

html javascript jquery append

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

在处理指针时,在控制台中为*p1和p输出不同值的含义

我是C++的新手,通过在线教学自学.今天我正在玩指针和不同的结果,只需要确认一些东西.基本上我知道指针是如何工作的.下面的图片是控制台中的简单代码和输出.

根据我的理解,第二个值2是存储在指针p1指向的元素中的值,因为输出是使用dereference运算符()的p1.

第一个值0x22ff1c,我只需要确认.我假设它是元素存储器中地址的值,因为输出是针对p1的,当然使用引用运算符/符号(&)指向[1]的地址.

我很确定我是从网上研究过的,但只需要有人直接向我确认.

所以我的问题基本上是:0x22ff1c确实是第二个元素的地址,如果没有,那么那个"看起来很滑稽"的值是什么呢?

#include <iostream>

int main()
{
   int a[5] = {1,2,3,4,5};
   int *p1;
   p1 = &a[1];
   std::cout << "Value1: " << p1 << "\n" << "Value2: " << *p1;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Value1: 0x22ff1c
Value2: 2
Run Code Online (Sandbox Code Playgroud)

c++

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

在Windows窗体节点下添加部分表单类

我目前面临的问题是我的主Form.cs文件变得越来越大,我想把它分成几个部分文件.这些应该粘贴MainForm.csVisual Studio解决方案资源管理器中的主Form()节点下面.

我尝试创建新的类文件并将其声明为我的MainForm类的部分源文件.但是,新创建的分部类文件会更改它的图标,看起来像一个表单.相反,它应该坚持在解决方案资源管理器MainFormNode 下面.

要想象问题:

错误排序的部分类文件

MainForm.ContextActions.cs文件内容如下:

namespace Interface_Group_Editor
{
    public partial class MainForm
    {
        [...]
    }
}
Run Code Online (Sandbox Code Playgroud)

内容类似于MainForm.Designer.cs文件.然而,.Designer.cs文件粘在MainForm.cs节点下面而.ContextActions.cs不是!

我只处理文件中绝对必要的表单事件,MainForm.cs并将我的业务逻辑放在我从表单访问的外部类中.但是,单独使用我的TreeView代码来维护和编辑表单大约需要500行代码,这些代码可以重新定位到新的部分源文件中.这将有助于项目结构的整体可见性!

有没有办法强制这种行为到解决方案资源管理器

c# winforms

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

在JavaScript中作为类运行

我试图在JavaScript中使用类似于Objects/Classes的东西.我发现这可以通过一个函数来完成.所以我的类代码是这样的:(使用jQuery)

function InfoBox(Box) { // My class
    this.Box = Box; // html element
    this.Text = 'Information here';
    this.Image = 'foo.png';

    setText = function () {
        this.Box.children('.Text').html(this.Text);
    }
}
Run Code Online (Sandbox Code Playgroud)

函数中的变量工作正常,但每当我调用方法/函数"setText"时

var iBoxUser = new InfoBox($('.iBoxUser'));
iBoxUser.Text = 'Welcome';
iBoxUser.setText(); // Error occurs here
Run Code Online (Sandbox Code Playgroud)

我收到错误:"未捕获TypeError:undefined不是函数"

似乎我在某种程度上做了错误的功能.或者功能甚至可以包含其他功能?

javascript class object

0
推荐指数
1
解决办法
91
查看次数