小编Ste*_*and的帖子

关于JavaScript中的变量的"成为或不成为"

只是对JavaScript做一点介绍.我习惯于经常在C++中测试指针的存在,以免崩溃.

从来没有我读哈姆雷特,但我阅读此页有关null并undefined在JavaScript中.

在坚果壳中,我可以:

if (varname == null)
if (varname === null)
if (typeof(varname) != 'undefined') 
if (varname != undefined)
if ('varname' in object) 
if (object.hasOwnProperty('varname')) 
Run Code Online (Sandbox Code Playgroud)

老实说,这对我来说有点太多了:).JavaScript中用于测试变量以避免崩溃的经典方法是什么?

javascript variables null

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

悬挂指向多态类的指针会导致未定义的行为.它是否可以成为任何可以想象的腐败的根源?

我知道Undefined Behavior,一旦发生,就不可能再考虑代码了.我完全相信.我甚至认为我不应该过多地理解UB:一个理智的C++程序不应该与UB,Period一起玩.

但是为了让我的同事和经理们相信它的真正危险,我试图找到一个具体的例子,我们在产品中有一个错误(他们认为这不是危险的,最糟糕的是它总会崩溃访问违规).


我主要担心的是在悬挂指向多态类的指针时调用虚拟成员函数.

删除指针时,Windows操作系统将在堆块的标题中写入几个字节,并且通常还会覆盖堆块本身的第一个字节.这是跟踪堆块的方法,将它们作为链表进行管理......操作系统的东西.

虽然它没有在C++标准中定义,但多态性是使用虚拟表AFAIK实现的.在windows下,指向虚拟表的指针位于堆块的第一个字节中,给定一个只继承一个基类的类.(多继承可能更复杂,但我不会考虑这一点.我们只考虑基类A,以及几个B,C,D继承A).


现在让我们考虑我有一个指向A的指针,它被实例化为D对象.并且D对象已经在代码中的其他位置删除了:所以堆块现在是一个空闲的堆块,它的第一个字节已被覆盖,因此虚拟表指针几乎随机指向内存中的某个位置,让我们说地址0x01234567.

当代码中的某个地方,我们称之为:

void test(A * pA)   
{
    # here we do not know that pA is dangling pointer
    # that memory address has been deleted by another thread, in another part of the code
    pA->SomeVirtualFunction();
}
Run Code Online (Sandbox Code Playgroud)

我正确地说:

  • 运行时将解释地址处的内存,0x01234567就好像它是一个虚拟表一样
  • 如果在错误地解释这个内存地址就像vtable一样,它不会进入禁止内存区域,也不会有任何访问冲突
  • 假设虚拟表将为虚拟函数提供一个随机地址,比如说 0x09876543
  • 随机地址的内存0x09876543将被解释为有效的二进制代码,并且EXECUTED为real
  • 这可能导致任何可以想象的腐败

我不想夸大其词,以便说服.那么,我所说的是正确的,可能的,可能的吗?

c++ undefined-behavior dangling-pointer

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

传递具有不同类型的可变数量的参数 - C++

我使用C++编写代码并对省略号有一些问题:

  1. 是否可以将类或类指针传入省略号?

  2. 基本上我想要做的是传递char*和的类型中的可变数量的参数class.我目前正在使用省略号并试图弄清楚如何传入课堂.如果省略号不适用于此处,有哪些选项?

我想让用户直接调用函数,func( params 1, params2, ...)而不是在将向量或数组作为参数传递给函数之前先将params分配给向量或数组.

c++

9
推荐指数
3
解决办法
9969
查看次数

Xslt生成Html <IMG>标签.如何将XML节点值用作<IMG>标记的src属性

我还在寻找,但我还没有找到执行此类操作的方法:

xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- some other templates -->
    <xsl:template match="IMAGE">
        <img src="src_attribute_to_be_read_from_the_xml_file.jpg"/>
    </xsl:template>     
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

在我的Xml <IMAGE>标记中,文本值是在src_attribute_to_be_read_from_the_xml_file.jpg由此Xslt文件处理时应插入字符串中的文件名.

你知道这个吗?

html xslt

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

如何减去两个XmlGregorianCalendar对象以创建一个Duration对象?

我想计算两个XmlGregorianCalendar对象之间的时间增量,一个减法,以便创建一个Duration对象.

但我还没有找到干净的方法来进行减法.你会怎么做?

java

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

模式匹配与警卫混合

我想定义函数:

accumulate_list' :: Num a => [a] -> ( a -> a -> a ) -> a
accumulate_list' l f 
    | [] f = 0
    | (x:xs) f = f x (accumulate_list xs f)
Run Code Online (Sandbox Code Playgroud)

但它没有编译,抱怨x,xs,x,xs不在范围内.

为了达到相同的效果,我已经定义了这个功能

accumulate_list :: Num a => [a] -> ( a -> a -> a ) -> a
accumulate_list [] f = 0
accumulate_list (x:xs) f = f x $ accumulate_list xs f
Run Code Online (Sandbox Code Playgroud)

它编译得很好,并且sum如果在参数中传递的功能是,那就像在列表上那样(+).是的,我终于发现,我想要实现的确实已经作为sum功能存在于Prelude中.

但是,我不明白为什么带有混合防护和模式匹配的第一个版本无法编译.问题是什么 ?

haskell pattern-matching

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

更换Shell管道

在子进程模块的Python 2.7文档中,我找到了以下代码段:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
Run Code Online (Sandbox Code Playgroud)

资料来源:https://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline

我不明白这一行: p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.

这里p1.stdout正在关闭.如果p2退出,它如何允许p1接收SIGPIPE?

python python-2.7

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

将图像过滤器应用于画布图像数据或JavaScript

我是Flash开发人员,我正在开发游戏的JavaScript端口.在Flash版本中,我使用发光,模糊和颜色矩阵滤镜来操纵显示对象的外观.我想用我的JavaScript视图做同样的事情.其中一些是装饰,而另一些则用于仔细产生所需的结果.因为这个项目的目标是创建一个精确的端口,我想知道我有什么选择将过滤器应用于原始画布数据,内联SVG标签或直接DOM元素.

我考虑过Pixastic,但我的合作者暂时坚持使用GPL许可证,这意味着我使用的任何技术都必须兼容GPL.Pixastic使用Mozilla Public License,因此我无法使用它.(这是一个巨大的失败,让我告诉你.)

我将再次简明扼要地说:如何有效地将像素滤镜应用于DOM元素,使用JavaScript绘制图像数据或SVG标签?

javascript html5 svg canvas svg-filters

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

哈斯克尔莱克萨你好世界

今天早上的坏消息,我愿意尝试使用Leksah(顺便说一句漂​​亮的应用程序)继续学习haskell.

我无法编译我发现阅读leksah教程的"Hello World"示例.

module Main (
main = putStrLn "Hello World"     
) where
Run Code Online (Sandbox Code Playgroud)

compilation-error: src\Main.hs:16:5: parse error on input='`

和

module Main (
) where
main = putStrLn "Hello World"
Run Code Online (Sandbox Code Playgroud)

compilation-error: src\Main.hs:1:0: The main functionmain'不是由模块导出的 Main'

你会建议我尝试别的什么?

重要编辑:现在Leksah附带了一个文件Main.hs,在你第一次启动leksah时直接加载,包含一个完全功能的Hello World迷你项目.它还有极简单元测试计数器部分.非常适合初学者 :-)

haskell leksah

8
推荐指数
3
解决办法
3224
查看次数

是CWnd :: GetSafeHwnd()和CWnd :: m_hWnd ThreadSafe?

我面临着大量多线程应用程序的大量崩溃.

阅读这些关于TLS的 MSDN 页面,技术说明和本文,我已经了解到CWnd对象在TLS中映射到HWND,这是一个线程依赖的内存访问.

我打算将看起来像CWnd线程远程访问的所有东西分离,然后将其转换为HWND引用,然后使用:: PostMessage作为通信端口.(就目前的代码而言,它代表了大量的工作,我现在正在制定解决方案,这需要花费很多时间,所以我们不得不讨论它).

但是我的一位同事真的非常坚持我只是将CWnd*保留在外国人线程中,采用:: PostMessage策略确定,但在外部线程中使用CWnd :: GetSafeHwnd()或pMyCWnd-> m_hWnd以便恢复原生HWND.

我一直认为,无处我已经看到GetSafeHwnd()是线程安全的,并且CWnd的Objet公司在TLS是,它在另一个线程值是不同的.我错了 ?MSDN显然使用术语"意外结果".

您的观点是什么,在创建者线程的外部线程中调用CWnd :: GetSafehwnd()或pMyCWnd-> m_hWnd?

您是否有任何MSDN文档说明这是否安全.

c++ winapi multithreading thread-safety thread-local-storage

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