小编Leo*_*Hat的帖子

何时以及为什么操作系统会在malloc/free/new/delete上将内存初始化为0xCD,0xDD等?

我知道操作系统有时会使用某些模式(如0xCD和0xDD)初始化内存.我想知道的是何时以及为什么会发生这种情况.

什么时候

这是否特定于编译器使用?

对于这个,malloc/new和free/delete的工作方式是否相同?

它是特定于平台的吗?

它会出现在其他操作系统上,例如Linux或VxWorks吗?

为什么

我的理解是这只发生在Win32调试配置中,它用于检测内存溢出并帮助编译器捕获异常.

你能举一个关于这个初始化如何有用的实际例子吗?

我记得读过一些东西(可能在Code Complete 2中),在分配内存时将内存初始化为已知模式是好的,某些模式会触发Win32中的中断,这将导致调试器中出现异常.

这有多便携?

c c++ memory memory-management

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

在main函数中重命名argc和argv是否安全?

许多程序对许多参数和字符串数组使用标准名称.主要功能的原型如下:int main(int argc, char *argv[]);.但如果我为这些变量选择自定义名称,我会破坏一些东西吗?

例如 int main(int n_of_args, char *args[]);

在编译器的上下文中,一切都很好.这些变量对于main函数是本地的,因此它们可以具有任何名称.简单的代码构建和运行完美.但这些名称可能由预处理器使用.那么重命名这些论点是否安全?

PS我个人觉得这些名字很糟糕,因为它们看起来很相似,只有一个字母不同.但是每个人都出于某种原因使用它们.

c c++ program-entry-point

82
推荐指数
6
解决办法
4836
查看次数

如何为我的应用程序为所有用户创建的文件授予完全权限?

我开发的工具需要将访问权限"完全控制"授予由它创建的文件.需要从所有Windows帐户甚至可能的未来帐户中读取,修改和删除它.这可以实现吗?

我知道我可以尝试使用SPECIFIC_USER:

FileSystemAccessRule rule = new FileSystemAccessRule(SPECIFIC_USER, FileSystemRights.FullControl, AccessControlType.Allow);
FileSecurity fSecurity = File.GetAccessControl(filePath);
fSecurity.SetAccessRule(rule);
File.SetAccessControl(filePath, fSecurity);
Run Code Online (Sandbox Code Playgroud)

但是如何将其授予所有用户?甚至可能的未来帐户?如果后一部分不可能,如何进行第一项要求?

谢谢.

编辑:

这是适合我的代码.取自回答者的链接.

private bool GrantAccess(string fullPath)
{
    DirectoryInfo dInfo = new DirectoryInfo(fullPath);
    DirectorySecurity dSecurity = dInfo.GetAccessControl();
    dSecurity.AddAccessRule(new FileSystemAccessRule(
        new SecurityIdentifier(WellKnownSidType.WorldSid, null), 
        FileSystemRights.FullControl,
        InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit,
        PropagationFlags.NoPropagateInherit,
        AccessControlType.Allow));

    dInfo.SetAccessControl(dSecurity);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

注意PropagationFlags.NoPropagateInherit哪个是必需的(在链接的最后面提到).它确实为未来的账户授予特权.

.net c# permissions user-accounts winforms

70
推荐指数
2
解决办法
7万
查看次数

单元测试项目不是从构建服务器构建的

我的VS2010解决方案中有一个测试项目.单元测试自己引用以下命名空间:

using Microsoft.VisualStudio.TestTools.UnitTesting;
Run Code Online (Sandbox Code Playgroud)

通过我的PC上的以下程序集访问:

Assembly Microsoft.VisualStudio.QualityTools.UnitTestFramework
    C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\
    PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
Run Code Online (Sandbox Code Playgroud)

当我在我的PC上构建解决方案时,我没有任何问题; 测试将构建并运行正常.

我们有一个内部网页面,我们可以用它来启动构建服务器上的构建.当我通过此页面构建时,构建失败并出现以下错误:

Generator.cs(3,17): error CS0234: The type or namespace name 'VisualStudio' 
does not exist in the namespace 'Microsoft' (are you missing an assembly
reference?)
Run Code Online (Sandbox Code Playgroud)

显而易见的问题是Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll上面提到的构建服务器上没有.我认为这将与VS2010一起安装,并且由于我的解决方案中的项目构建了.NET 4.0目标,我希望这将安装在构建服务器上.

解决这个问题的最简单方法是什么?构建服务器不在我的管辖范围内,我不特别想记录一个作业来安装新的库.

.net c# unit-testing visual-studio-2010

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

将标志传递给方法的替代方法?

有时在修复现有代码库中的缺陷时,我可能(通常是出于懒惰)决定更改方法:

void
MyClass::foo(uint32_t aBar)
{
    // Do something with aBar...
}
Run Code Online (Sandbox Code Playgroud)

至:

void
MyClass::foo(uint32_t aBar, bool aSomeCondition)
{
    if (aSomeCondition)
    {
        // Do something with aBar...
    }
}
Run Code Online (Sandbox Code Playgroud)

在代码审查期间,一位同事提到了一种更好的方法是子类MyClass来提供这种专门的功能.

但是,我认为,只要aSomeCondition不违反其目的或凝聚力,MyClass就可以使用它.只有当代码被标志和if语句渗透时,继承才是更好的选择,否则我们可能会进入架构宇航员领域.

这里的转折点是什么?

注意:我刚看到这个相关的答案表明a enum可能是比a更好的选择bool,但我认为我的问题仍然适用于这种情况.

c++ parameters inheritance

23
推荐指数
4
解决办法
6325
查看次数

"编辑并继续"如何在Visual Studio中工作?

我一直认为这是Visual Studio中非常有用的功能.对于那些不了解它的人,它允许您在调试正在运行的进程时编辑代码,在二进制文件仍在运行时重新编译代码并继续使用应用程序与新代码无缝地使用,而无需重启它.

这个功能是如何实现的?如果我修改的代码在应用程序加载的DLL中,应用程序是否只是卸载DLL并重新加载它?在我看来,这似乎很容易出现不稳定问题,所以我认为它会比这更聪明.有任何想法吗?

c++ visual-studio

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

.NET Framework 4的向后兼容性

我们在.net framework 3.5上构建了WPF应用程序.

一些测试人员发现他们是否卸载了.net framework 3.5,但安装了.net framework 4.0,我们的APP无法自行启动.

这意味着.net框架4.0不包括所有3.5个库,用户必须安装.net 3.5,即使它们有4.0?

我在这里看到的是Microsoft列出的一些迁移问题 http://msdn.microsoft.com/en-us/library/ee941656.aspx#windows_presentation_foundation_wpf

它们都是破坏性的变化,以至于后向兼容性被破坏了吗?

谢谢

.net wpf .net-4.0

18
推荐指数
3
解决办法
9895
查看次数

是否可以对Dictionary字符串键进行部分字符串匹配?

Dictionary<string, List<int>>在我的代码中有一个我以下面的方式使用:

Key           Values  
2011-07-15    1, 2, 3
2011-07-20    4, 5, 6
2010-02-11    7, 8, 9
Run Code Online (Sandbox Code Playgroud)

我的代码需要能够查询匹配键中特定子字符串的所有值.例如,如果我有子字符串,2011-07它应该返回值{1, 2, 3, 4, 5, 6}.子字符串11应返回所有ID 1-9.

有人可以推荐一种简洁的方法来实现这一目标吗?或者提供更好的数据结构来检索这些信息?

c# containers dictionary

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

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

将成员添加到现有结构而不破坏遗留代码

我正在使用的一些遗留代码中有以下定义.

struct VlanData
{
    uint16_t mEtherType;
    uint16_t mVlanId;
};
Run Code Online (Sandbox Code Playgroud)

我想在这个结构中添加一个新成员:

struct VlanData
{
    uint16_t mEtherType;
    uint16_t mVlanId;
    uint8_t mVlanPriority; // New member
};
Run Code Online (Sandbox Code Playgroud)

但是,VlanData遗留代码的使用相当不一致.

未在施工时初始化:

VlanData myVlans;
myVlans.mEtherType = 0x8100;
myVlans.mVlanId = 100;
Run Code Online (Sandbox Code Playgroud)

初始值:

VlanData myVlans = { 0x8100, 100 };
Run Code Online (Sandbox Code Playgroud)

我想要做的是提出一种安全的方法来确保遗留代码中的"mVlanPriority"自动设置为0,而无需更新大量代码.

我知道我可以修改遗留代码来对所有成员进行值初始化,如下所示:

VlanData myVlans = {};
Run Code Online (Sandbox Code Playgroud)

但我不想更新所有这些代码.我相信创建这样的默认构造函数会有所帮助:

VlanData()
: mEtherType(0),
  mVlanId(0),
  mVlanPriority(0)
{}
Run Code Online (Sandbox Code Playgroud)

但这也会破坏POD结构的性质.

所以我想我有几个问题:

  1. 有没有一种安全的方法可以确保mVlanPriority遗留代码中的设置为0而不更新遗留代码?
  2. 如果这不再是一个POD类型,那么该类会有什么用处呢?

c++ struct value-initialization

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