小编L̲̳*_*̲̳̳的帖子

如何格式化函数指针?

有没有办法在ANSI C中打印指向函数的指针?当然这意味着你必须将函数指针强制转换为void指针,但似乎不可能?

#include <stdio.h>

int main() {
    int (*funcptr)() = main;

    printf("%p\n", (void* )funcptr);
    printf("%p\n", (void* )main);

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

$ gcc -ansi -pedantic -Wall test.c -o test
test.c:在函数'main'中:
test.c:6:警告:ISO C禁止将函数指针转换为对象指针类型
test.c:7:warning :ISO C禁止将函数指针转换为对象指针类型
$ ./test
0x400518
0x400518

它"工作",但非标准...

c function-pointers

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

在做GHC解释器的某些情况下只有空间泄漏:concat <some list> !! ñ

我定义我自己的版本concat,myConcat:

module Eh where

myConcat []          = []
myConcat ([]:os)     = myConcat os
myConcat ((x:xs):os) = x : myConcat (xs:os)

(!!!)  :: [a] -> Int -> a
xs     !!! n | n < 0 = error "negative index"
[]     !!! _         = error "index too large"
(x:_)  !!! 0         = x
(_:xs) !!! n         = xs !!! (n-1)
Run Code Online (Sandbox Code Playgroud)

如果我myConcat <some huge list> !! n使用GHC解释器,它会以300MB/s的速度窃取我的内存,而且我必须在它召唤OOM杀手之前杀死它.请注意,我加载Eh为"解释",我在加载之前不编译它.

code run in the GHC interpreter        space leak? …

haskell ghc

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

XSS攻击绕过值属性中的htmlspecialchars()函数

假设我们有这种形式,用户注入恶意代码的可能部分如下所示

...
<input type=text name=username value=
       <?php echo htmlspecialchars($_POST['username']); ?>>
...
Run Code Online (Sandbox Code Playgroud)

我们不能简单地添加标签或javascript:alert(); call,因为value将被解释为一个字符串,而htmlspecialchars会过滤掉<,>,',",所以我们不能用引号关闭这个值.

我们可以使用String.fromCode(.....)来绕过引号,但我仍然无法弹出一个简单的警告框.

有任何想法吗?

php security xss

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

在GHC解释器中冗余使用seq时出现空间泄漏

我将此代码键入解释器并快速占用内存:

last [1..10^7] `seq` ()
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这需要超过O(1)空间.如果我这样做(这应该是相同的,因为Show强制弱头正常形式,所以seq是多余的?):

last [1..10^7]
Run Code Online (Sandbox Code Playgroud)

......工作正常

我无法在翻译之外重现这种情况.

这里发生了什么?


以下是一些测试用例:http: //hpaste.org/69234

注意事项:

  • 通过在解释器中运行,我加载wtf.hs而不编译它,并输入wtf<n>ghci.
  • 通过编译,我做到了ghc --make wtf.hs && ./wtf.
  • last可以替换sum带有严格累加器的函数或在列表中找到最大元素的函数,并且仍然会发生空间泄漏
  • 使用时,我还没有看到这种行为$!,而不是seq.
  • 我尝试添加一个虚拟()参数,因为我认为这可能是一个CAF问题.没有改变.
  • 这可能不是函数打开的问题Enum,因为我可以用wtf5它来重现行为,之后根本不会使用它Enum.
  • 这可能不是一个问题Num,Int或者Integer,因为我可以重现的行为,而他们wtf14wtf16.

我尝试使用Peano算法重现问题,将列表和整数从等式中取出(在10 ^ 9的末尾取出),但遇到其他共享/空间泄漏问题,我在尝试实现时不明白*.

haskell ghc space-leak

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

为什么我不能在SecurityManager下关闭自己的ExecutorService?

在默认的安全管理器下,如果我创建一个ExecutorService(在这种情况下是ThreadPoolExecutor),我无法关闭它,shutdown()只是调用checkPermission("modifyThread")并因此立即死掉:

import java.util.concurrent.*;

class A {
    public static void main( String[] args) {
        Thread ct = Thread.currentThread();
        System.out.println("current thread: " + ct);
        ct.checkAccess(); // we have access to our own thread...
        ThreadPoolExecutor tpe = new ThreadPoolExecutor(
            1, // one core thread
            1, // doesn't matter because queue is unbounded
            0, TimeUnit.SECONDS, // doesn't matter in this case
            new LinkedBlockingQueue<Runnable>(), /* unbound queue for
                                                  * our single thread */
            new ThreadFactory() {
                public …
Run Code Online (Sandbox Code Playgroud)

java security securitymanager jsr166

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

为什么在Haskell中丢弃值是()而不是⊥?

如果有一个可以丢弃的值,Haskell中的结果会被()用来代替?吗?

示例(目前无法想到除IO操作之外的任何其他内容):

mapM_ :: (Monad m) => (a -> m b) -> [a] -> m ()
foldM_ :: (Monad m) => (a -> b -> m a) -> a -> [b] -> m ()
writeFile :: FilePath -> String -> IO ()
Run Code Online (Sandbox Code Playgroud)

在严格的评估下,这是完全合理的,但在Haskell中,它只会使域更大.

也许有"未使用的参数"函数d -> a是严格的d(哪里d是一个无约束的类型参数,并没有显示免费a)?例如:seq,const' x y = yseq x.

haskell

12
推荐指数
4
解决办法
1079
查看次数

要为加密狗附加系统编写哪些代码以提供更好的安全性?

我开发了一个软件(使用C和Python),我想用加密狗保护它,这样复制和逆向工程变得足够困难.我的加密狗设备附带一个api,提供以下功能:

  • 检查加密狗是否存在
  • 检查适当的加密狗
  • 写入加密狗的内存位置
  • 从加密狗等的内存位置读取(我认为休息不是那么好......)

我可以在源代码中做些什么来使它变得更难破解.Dongle提供商建议,我应该在循环中或事件之后检查正确的加密狗存在,或者我应该以有效的方式使用加密狗存储器.但是怎么样?我不知道破解者是如何破解的.请说清楚.提前致谢.

PS:请不要建议混淆.我已经这样做了.

copy-protection dongle

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

带手动内存管理的口译语言?

哪种解释语言无指针语言(IE:Python,Java,Perl,PHP,Ruby,Javascript等)都有手动内存管理?我不记得曾经听过一个.

解释语言的主要问题不是垃圾收集的非确定性延迟(或没有足够延迟时的空间复杂性)吗?那么为什么不写一些与Java完全相同的东西,但强制你手动释放内存?

编辑

我的意思是手动内存管理是语言将引用对象,您可以使用引用删除对象.

例:

Object a = new Object(); // a is a reference to the object
Object b = a; // b is a reference to the same object
a.method(); // fine
delete b; // delete the object referenced by b
a.method(); // null dereference exception
Run Code Online (Sandbox Code Playgroud)

那么有什么警告(除了内存泄漏)可能会出现像这个例子的语言?

memory interpreter programming-languages memory-management

10
推荐指数
3
解决办法
3215
查看次数

Ada中的二次方程

我刚走过来,决定尝试一下Ada.缺点是语法和功能远离C++.所以我不得不喜欢各种各样的东西让这件事情起作用.

我的问题是,如果有更好的方法来做这个计算,我在这里做了什么

   IF(B < 0.0) THEN
      B := ABS(B);
      X1 := (B / 2.0) + Sqrt( (B / 2.0) ** 2.0 + ABS(C));
      X2 := (B / 2.0) - Sqrt( (B / 2.0) ** 2.0 + ABS(C));
   ELSE
      X1 := -(B / 2.0) + Sqrt( (B / 2.0) ** 2.0 - C);
      X2 := -(B / 2.0) - Sqrt( (B / 2.0) ** 2.0 - C);
   END IF;
Run Code Online (Sandbox Code Playgroud)

我有一些负数的问题,这就是为什么我做了一个IF语句并使用ABS()将它们转为正数.但奇怪的是它适用于另一种情况,这很奇怪......

math ada

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

如何在Erlang中处理内存不足?

有了Erlang的"让它崩溃"的理念,如果一个进程无法分配进行其操作所需的内存,人们就会期望整个VM不会崩溃.实际上,如果系统有一个启发式来杀死一些进程来释放一些内存,那么其他一些进程就会处理这个并恢复.根管理员可能不太可能被启发式杀死.

这与大多数现代流行语言形成鲜明对比,这些语言只会死或让操作系统选择做什么.

如何在Erlang中实际处理内存不足?

erlang fault-tolerance out-of-memory

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

可扩展的数据库标记模式

编辑:建立标记系统的人.不读这个.这不是你想要的.当我不知道RDBMS都有自己的优化方法时,我问过这个,只需使用简单的多对多方案.

我有一个发布系统,有数百万的帖子.每个帖子都可以有无数个与之关联的标签.

用户可以创建具有注释,创建日期,所有者等的标签.标签几乎就像一个帖子本身,因为人们可以发布关于标签的注释.

每个标记关联都有一个所有者和日期,因此我们可以看到谁添加了标记以及何时添加.

我的问题是如何实现这一点?它必须通过标签快速搜索帖子,或通过邮寄标签.此外,用户可以通过在字段中键入名称来为帖子添加标签,有点像谷歌搜索栏,它必须为您填写标签名称的其余部分.

我目前有3个解决方案,但不确定哪个是最好的,或者是否有更好的方法.

请注意,我没有显示笔记的布局,因为一旦我得到适当的标签解决方案,这将是微不足道的.

方法1.链接列表

post中的tagId指向tag_assoc中的链表,应用程序必须遍历列表,直到flink = 0

post:           id, content, ownerId, date, tagId, notesId
tag_assoc:      id, tagId, ownerId, flink
tag:            id, name, notesId
Run Code Online (Sandbox Code Playgroud)

方法2.非规范化

tags只是一个VARCHAR或TEXT字段,包含tagId:ownerId的制表符分隔数组.它不能是固定的大小.

post:           id, content, ownerId, date, tags, notesId
tag:            id, name, notesId
Run Code Online (Sandbox Code Playgroud)

方法3. Toxi

(来自:http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html,这里也是一样的:标签或标签的推荐SQL数据库设计)

post:          id, content, ownerId, date, notesId
tag_assoc:     ownerId, tagId, postId
tag:           id, name, notesId
Run Code Online (Sandbox Code Playgroud)

方法3提出了一个问题,迭代tag_assoc中每一行的速度有多快?

方法1和2应该通过post快速返回标签,但对于按标签发布的帖子,必须另外创建一个查找表.

我不得不担心的最后一件事是按名称优化搜索标签,我还没有完成.

我在这里制作了一个ASCII图:http://pastebin.com/f1c4e0e53

sql database tags performance scalability

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

为什么Class.getPackage为来自不同包的类返回相同的包?

我创建了一个new ClassLoader并使它定义一个new Class,这意味着新类应该在一个新的命名空间中,它就是AFAIK.奇怪的是,当我调用Class.getPackage新类时,它返回与通过调用getPackage主命名空间中的任何其他类返回的完全相同的对象.

根据JVM规范:

类或接口的运行时包由包名称和类或接口的类加载器定义.

换句话说,如果在同一个包中有两个类,但是由不同的类加载器加载,则它们被认为是在不同的包中.(这也可以通过下面的测试用例中的反映来"确认".)

那么当我这样做时,我得到了getPackage两个类的相同结果?

这是我的测试:

package pkg;
import java.io.*;

// Yes, you can try commenting this class, you'll get the same result.
class LoadedClass {
    LoadedClass() {
        System.out.println("LoadedClass init");
    }
}

class MyClassLoader extends ClassLoader {
    Class<?> defineClass(String name, byte[] b) {
        return defineClass(name, b, 0, b.length);
    }
}

class Main {
    public static void main(String[] args) throws Exception {
        MyClassLoader mcl = new MyClassLoader();

        // load …
Run Code Online (Sandbox Code Playgroud)

java jvm classloader

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

iphone z命令中的cocos2d

我正在开发一个有多个精灵的游戏,一旦你触摸精灵,它就会做点什么.

我的问题是z顺序问题,我的大多数精灵都是重叠的,当你触摸重叠的精灵时,后面的那个(我认为最低的z顺序)反应而不是前面的那个.

我需要了解更多关于cocos2d的z顺序.

如何在运行时更改z顺序?

谢谢!

iphone cocos2d-iphone

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