我在这个帖子上对我的回答发表了评论:
总之,我有这样的代码:
int * somefunc (void)
{
int * temp = (int*) malloc (sizeof (int));
temp[0] = 0;
return temp;
}
Run Code Online (Sandbox Code Playgroud)
我有这个评论:
我可以说,请不要转换malloc的返回值?它不是必需的,可以隐藏错误.
我同意在C中不需要强制转换.它在C++中是强制性的,所以我通常添加它们以防万一我必须在C++中移植代码.
但是,我想知道这样的演员是如何隐藏错误的.有任何想法吗?
似乎双方都有非常好的和有效的论据.感谢发帖,伙计们.
所以我有我的活动,按下"退出"按钮我调用Activity.finish().这有效地关闭了我的申请.
问题:我的应用程序的Dalvik过程仍然像背景中的僵尸一样闲逛.看起来这是正常的,因为其他应用程序也这样做.甚至hello-world示例也在内存中徘徊.
我可以忍受这个,但不幸的是这种行为使我的应用程序的开发变得痛苦.我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样).
一切都以某种方式保持活着,没有任何理由.
我怎样才能真正从记忆中删除我的活动?
我正在寻找像Activity.finish_and_kill_my_process_please()调用或类似的东西.
我喜欢阅读有关新的和聪明的算法.我喜欢开箱即用,因此欢迎各种计算领域的各种算法.
我不时阅读研究论文以跟上当前的研究并扩展我的视野.我也想学习新的技巧.不幸的是,我倾向于只关注我感兴趣的领域,所以我想念很多有用的东西.
我们不要发布主流的东西.而是写一些让你思考的特别的东西:"哇 - 现在这是一个聪明的解决方案!".
我正在尝试找到/制作一个算法来计算两个任意填充的2D对象的交集(一个新的填充对象).使用线或立方贝塞尔定义对象,并且可以具有孔或自相交.我知道几个现有的算法对多边形做了同样的事情,在这里列出.但是,我想支持beziers而不将它们细分为多边形,并且输出应该与没有交叉点的区域中的输入具有大致相同的控制点.
这是一个交互式程序来做一些CSG,但剪辑不需要是实时的.我已经搜索了一段时间,但没有找到好的起点.
我想为编译器编写一个(gmake)makefile - 与gcc不同 - 将所有输出文件放入特定目录.不幸的是,这种行为无法改变.
我的来源在多个目录中.如何编写允许我编译源的模式规则.
好的,这有点不清楚.这是一个例子.我的消息来源看起来像这样:
./folder1/foo.c
./folder2/bar.c
Run Code Online (Sandbox Code Playgroud)
并且输出文件最终会像这样:
./obj/foo.obj
./obj/bar.obj
Run Code Online (Sandbox Code Playgroud)
我的规则应该如何编译我的源代码?
%.obj : %.c
$(COMPILER) -c $<
Run Code Online (Sandbox Code Playgroud)
不管用.
有任何想法吗?我想避免每个源文件的隐式规则......
我想反转一个4x4矩阵.我的数字以定点格式存储(准确地说是1.15.16).
使用浮点运算,我通常只需构建伴随矩阵并除以行列式(例如强力解决方案).到目前为止,这对我有用,但在处理定点数时,由于使用了所有乘法,我得到了不可接受的精度损失.
注意:在定点运算中,我总是丢弃一些立即结果的最低有效位.
那么 - 反转矩阵的数值最稳定的方法是什么?我不太关心性能,但简单地说浮点就是放慢我的目标架构.
language-agnostic fixed-point matrix linear-algebra matrix-inverse
对于测试,我想从应用程序加载两个共享库实例.库中的代码提供了API,但它不允许我初始化库的两个(或更多)实例,因为某些函数依赖于静态变量.
我正在为这个lib编写单元测试,我想有两个实例,因为这会简化我的测试.
该库未链接到该程序.相反,我使用LoadLibrary/GetProcAddress(或Linux上的dlopen/dlsym)直接加载它.为了区分这两个库,我可以简单地为我正在加载的函数指针使用不同的名称...
以下是问题:
是否可以加载这样的库两次?例如,库的所有已加载实例应该获得自己的数据段,并且不会相互影响.
如果是这样:这对于Windows和Linux来说是否可移植?
有谁知道如何摆脱以下汇编警告?
代码是x86,32位:
int test (int x)
{
int y;
// do a bit-rotate by 8 on the lower word. leave upper word intact.
asm ("rorw $8, %0\n\t": "=q"(y) :"0"(x));
return y;
}
Run Code Online (Sandbox Code Playgroud)
如果我编译它,我得到以下(非常有效)警告:
Warning: using `%ax' instead of `%eax' due to `w' suffix
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是告诉编译器/汇编器我想要访问%0的低16位子寄存器的方法.访问字节子寄存器(在本例中为AL和AH)也很好.
我已经选择了"q"修饰符,因此编译器被迫使用EAX,EBX,ECX或EDX.我已经确保编译器必须选择一个具有子寄存器的寄存器.
我知道我可以强制asm-code使用特定的寄存器(及其子寄存器),但我想将寄存器分配作业留给编译器.
在Linux应用程序中,我使用管道在线程之间传递信息.
使用管道的想法是我可以使用poll(2)一次等待多个管道.这在实践中运作良好,我的线程大多数时间都在睡觉.如果有事可做,他们只会醒来.
在用户空间中,管道看起来就像两个文件句柄.现在我想知道这些管道在OS端使用了多少资源.
顺便说一句:在我的应用程序中,我只是偶尔发送单个字节.把我的管道想象成简单的消息队列,它允许我唤醒接收线程,告诉他们发送一些状态数据或终止.
我有一个正在侦听Unix域套接字的程序.
当客户端连接到套接字时,我想找出连接的程序,然后决定是否允许连接(基于用户/组设置).
这可能在Linux下,如果是这样,怎么样?