只是对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中用于测试变量以避免崩溃的经典方法是什么?
我知道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就好像它是一个虚拟表一样0x098765430x09876543将被解释为有效的二进制代码,并且EXECUTED为real我不想夸大其词,以便说服.那么,我所说的是正确的,可能的,可能的吗?
我使用C++编写代码并对省略号有一些问题:
是否可以将类或类指针传入省略号?
基本上我想要做的是传递char*和的类型中的可变数量的参数class.我目前正在使用省略号并试图弄清楚如何传入课堂.如果省略号不适用于此处,有哪些选项?
我想让用户直接调用函数,func( params 1, params2, ...)而不是在将向量或数组作为参数传递给函数之前先将params分配给向量或数组.
我还在寻找,但我还没有找到执行此类操作的方法:
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文件处理时应插入字符串中的文件名.
你知道这个吗?
我想计算两个XmlGregorianCalendar对象之间的时间增量,一个减法,以便创建一个Duration对象.
但我还没有找到干净的方法来进行减法.你会怎么做?
我想定义函数:
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中.
但是,我不明白为什么带有混合防护和模式匹配的第一个版本无法编译.问题是什么 ?
在子进程模块的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?
我是Flash开发人员,我正在开发游戏的JavaScript端口.在Flash版本中,我使用发光,模糊和颜色矩阵滤镜来操纵显示对象的外观.我想用我的JavaScript视图做同样的事情.其中一些是装饰,而另一些则用于仔细产生所需的结果.因为这个项目的目标是创建一个精确的端口,我想知道我有什么选择将过滤器应用于原始画布数据,内联SVG标签或直接DOM元素.
我考虑过Pixastic,但我的合作者暂时坚持使用GPL许可证,这意味着我使用的任何技术都必须兼容GPL.Pixastic使用Mozilla Public License,因此我无法使用它.(这是一个巨大的失败,让我告诉你.)
我将再次简明扼要地说:如何有效地将像素滤镜应用于DOM元素,使用JavaScript绘制图像数据或SVG标签?
今天早上的坏消息,我愿意尝试使用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迷你项目.它还有极简单元测试计数器部分.非常适合初学者 :-)
我面临着大量多线程应用程序的大量崩溃.
阅读这些关于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