小编And*_*anu的帖子

如何使用C断言使代码更安全?

阅读misc.与SDL开发相关的教程我发现了两个不同的例子,做了同样的事情,但是以不同的方式.从代码"安全性"和可维护性的角度来看,我想知道你认为哪两个是正确的.

在第一个例子中,程序员根本没有使用断言,但代码看起来还不错(至少在我看来):

int main(){
        SDL_Surface *screen;

        /** Initialize SDL */
        if(SDL_Init(SDL_INIT_VIDEO)!=0){
                fprintf(stderr,"Unable to initialize SDL: %s",SDL_GetError());
        }
        atexit(SDL_Quit);

        /** Sets video mode */
        screen=SDL_SetVideoMode(640,480,16,SDL_HWSURFACE);
        if(screen==NULL){
                fprintf(stderr,"Unable to set video mode: %s",SDL_GetError());
        }

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

在第二个例子中,程序员[其他]正在使用不同的方法,例如(代码不完全是复制粘贴):

int main(){
        SDL_Surface* screen;

        /** Initialize SDL */
        assert(SDL_Init(SDL_INIT_VIDEO)==0);
        atexit(SDL_Quit);

        /** Sets video mode */
        screen=SDL_SetVideoMode(640,480,16,SDL_HWSURFACE);
        assert(screen!=NULL);

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

是否可以在if条件(从第一个示例)中"替换"与第二个示例中的断言一样?

什么是正确的策略(如果有的话)?

c assert

4
推荐指数
2
解决办法
7488
查看次数

如何在java中编写自己的桌面共享应用程序?

您好我想用Java编写自己的桌面共享应用程序.

该应用程序应具有一些非常默认的功能:

  • 捕捉画面;

  • 允许远程连接用户单击/编辑字段.

我正在考虑使用Java Robot类进行鼠标移动/按键操作.问题是我不知道使用什么屏幕捕获策略.

我应该每秒顺序进行屏幕捕获(在主机计算机上),并通过网络发送带有UDP的捕获,以便客户端可以拦截数据克数吗?这对网络来说有点过分了吗?

还有哪些其他策略?(除了尝试已经存在的应用程序).

PS:如果有必要,我甚至可以使用JNI编写本机代码(这仍然是我计划做的最后一件事).

后来的编辑:经过一番调查后,我得出了@ThorbjørnRavnAndersen的结论.Java可能不是这种应用程序的最佳选择.我可以尝试使用JNI,但该代码将覆盖我项目的75%以上.

我会尝试寻找其他替代方案.

java udp desktop-sharing

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

如何模拟内存分配失败?

我想广泛测试一些 C 代码的内存泄漏。

在我的机器上,我有 4 Gb 的 RAM,因此动态内存分配不太可能失败。如果内存分配失败,我仍然想看看代码的解释,看看恢复机制是否足够“强大”。

你有什么建议?如何模拟内存规格较低的环境?我如何模拟我的测试?

编辑:我希望我的测试独立于代码。我只能“访问”我正在测试的库中不同函数的返回值。我不应该在我正在测试的代码中编写“测试逻辑”。

c testing memory-leaks memory-management mocking

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

为什么Primitives的包装类没有setter?

为什么Wrapper类(如Integer,Double等)没有内部原始值的setter是什么原因?

我问这个是因为这种功能会简化微积分,并使Java语言更灵活一些.

让我举几个例子.

1)我们来看下面的例子:

Integer x = new Integer(5);
x++;
Run Code Online (Sandbox Code Playgroud)

幕后的前一个代码是执行自动装箱.就像是:

int x_tmp = x.intValue();
x_tmp++;
x = new Integer(x_tmp); // Yes that's a new memory allocation
Run Code Online (Sandbox Code Playgroud)

由于这个问题,在Wrapper上执行微积分比在普通原始类型上执行要慢.使用setter,可以更容易地增加内部值,而无需在堆上分配另一个对象.

2)另一个困扰我的问题是,在Java中编写交换函数是不可能的,就像我在C(使用指针)或C++(指针或引用)中所做的那样.

如果我写,void swap(Integer x, Integer y)我无法访问内部值因为,并且我将无法交换值.

PS:我的一个朋友建议我应该考虑更大的图景,并考虑并发性和类型不变性.

所以你有解释吗?谢谢!

java setter immutability wrapper primitive-types

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

C宏生成printf格式的字符串

是否可以编写一个返回printf格式的宏(使用标记串联)?例如

#define STR_FMT(x) ...code-here...
Run Code Online (Sandbox Code Playgroud)

STR_FMT(10) 扩展到 "%10s"

STR_FMT(15) 扩展到 "%15s"

...等

这样我就可以在printf中使用这个宏了:

printf(STR_FMT(10), "*");
Run Code Online (Sandbox Code Playgroud)

c macros printf c-preprocessor

4
推荐指数
2
解决办法
4484
查看次数

衡量绩效的一种方法

鉴于99 Haskell问题的练习14 :

(*)复制列表的元素.

例如.:

*Main> dupli''' [1..10]
[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10]
Run Code Online (Sandbox Code Playgroud)

我已经实施了4个解决方案:

{-- my first attempt --}
dupli :: [a] -> [a]
dupli [] = []
dupli (x:xs) = replicate 2 x ++ dupli xs

{-- using concatMap and replicate --}
dupli' :: [a] -> [a]
dupli' xs = concatMap (replicate 2) xs

{-- usign foldl --}
dupli'' :: [a] -> [a]
dupli'' xs = foldl (\acc x -> acc ++ [x,x]) [] xs

{-- using foldl 2 --}
dupli''' …
Run Code Online (Sandbox Code Playgroud)

haskell

4
推荐指数
2
解决办法
489
查看次数

从程序员的角度来看,我们可以将神经网络视为更高级的“数据结构”吗?

我目睹了关于这个话题的辩论,我想知道你的意见?从程序员的角度来看,我们可以将神经网络视为更高级的“数据结构”吗?

神经网络实际上不仅仅是一种数据结构吗?

neural-network

3
推荐指数
2
解决办法
4110
查看次数

如何在Netbeans项目浏览器中忽略pyc文件(正则表达式问题)

我想在Netbeans项目浏览器中忽略.pyc文件.

我想我找到了一种方法:TOOLS - > MISCELLANEOUS - > FILES.

这是一个名为的部分:IDE忽略的文件.

那里的字段正在等待描述文件模式的正则表达式.该字段的默认值为:

^(CVS|SCCS|vssver.?\.scc|#.*#|%.*%|_svn)$|~$|^\.(?!htaccess$).*$
Run Code Online (Sandbox Code Playgroud)

如何修改此表达式以(另外)忽略.pyc文件?

python regex netbeans

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

将运算符与lambda函数关联的映射

我有一个Haskell Map,包含字符串作为键,一些lambda函数作为项.例如.:

-- List of supported Operators -> mapping with functions
ops = Map.fromList [("+", \x y -> x + y),
                    ("-", \x y -> y - x),
                    ("*", \x y -> x * y),
                    ("/", \x y -> y / x)]
Run Code Online (Sandbox Code Playgroud)

我想编写一个输入的函数:

  • 表示运算符的字符串["+"," - ","*","/"]
  • 两个数字

基于运算符和ops映射,函数将评估和/减/等.这两个数字.

我尝试过类似的东西:

(Map.lookup "+" a) 1 2
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

错误是:

Top level:
    No instance for (Show (Integer -> Integer))
      arising from use of `print' at Top level
    Probable fix: add an instance declaration for …
Run Code Online (Sandbox Code Playgroud)

lambda haskell map

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

让Haskell中的语法

在Haskell中为问题10 (99个问题)编写了以下解决方案:

{-- using dropWhile and takeWhile --}
enc :: (Eq a) => [a] -> [(Int, a)]
enc [] = []
enc (x:xs) = (length $ takeWhile (==x) (x:xs), x) : enc (dropWhile (==x) xs)
Run Code Online (Sandbox Code Playgroud)

我想重写相同的解决方案,但这次使用let语法.

{-- using dropWhile and takeWhile / more readable --}
enc' :: (Eq a) => [a] -> [(Int, a)]
enc' [] = []
enc' (x:xs) = let num = length $ takeWhile (==x) (x:xs)
      rem = dropWhile (==x) (x:xs)
      in (num, x) …
Run Code Online (Sandbox Code Playgroud)

haskell indentation

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