小编Nil*_*nck的帖子

在C中不必要的指针转换

我在这个帖子上对我的回答发表了评论:

函数调用中的malloc似乎在返回时被释放?

总之,我有这样的代码:

int * somefunc (void)
{
  int * temp = (int*) malloc (sizeof (int));
  temp[0] = 0;
  return temp;
}
Run Code Online (Sandbox Code Playgroud)

我有这个评论:

我可以说,请不要转换malloc的返回值?它不是必需的,可以隐藏错误.

我同意在C中不需要强制转换.它在C++中是强制性的,所以我通常添加它们以防万一我必须在C++中移植代码.

但是,我想知道这样的演员是如何隐藏错误的.有任何想法吗?

编辑:

似乎双方都有非常好的和有效的论据.感谢发帖,伙计们.

c c++ pointers

16
推荐指数
4
解决办法
2370
查看次数

如何杀死我自己的活动 - 艰难的方式

所以我有我的活动,按下"退出"按钮我调用Activity.finish().这有效地关闭了我的申请.

问题:我的应用程序的Dalvik过程仍然像背景中的僵尸一样闲逛.看起来这是正常的,因为其他应用程序也这样做.甚至hello-world示例也在内存中徘徊.

我可以忍受这个,但不幸的是这种行为使我的应用程序的开发变得痛苦.我有一个连接到我的Activity的远程服务,并且在我的Activity卸载之前这个服务不会卸载(正如它所说的那样).

一切都以某种方式保持活着,没有任何理由.

我怎样才能真正从记忆中删除我的活动?

我正在寻找像Activity.finish_and_kill_my_process_please()调用或类似的东西.

android kill process android-activity

16
推荐指数
4
解决办法
4万
查看次数

那么 - 最近你"发现"了哪些激动人心的算法?

我喜欢阅读有关新的和聪明的算法.我喜欢开箱即用,因此欢迎各种计算领域的各种算法.

我不时阅读研究论文以跟上当前的研究并扩展我的视野.我也想学习新的技巧.不幸的是,我倾向于只关注我感兴趣的领域,所以我想念很多有用的东西.

我们不要发布主流的东西.而是写一些让你思考的特别的东西:"哇 - 现在这是一个聪明的解决方案!".

language-agnostic algorithm

15
推荐指数
3
解决办法
1264
查看次数

Bezier剪辑

我正在尝试找到/制作一个算法来计算两个任意填充的2D对象的交集(一个新的填充对象).使用线或立方贝塞尔定义对象,并且可以具有孔或自相交.我知道几个现有的算法对多边形做了同样的事情,在这里列出.但是,我想支持beziers而不将它们细分为多边形,并且输出应该与没有交叉点的区域中的输入具有大致相同的控制点.

这是一个交互式程序来做一些CSG,但剪辑不需要是实时的.我已经搜索了一段时间,但没有找到好的起点.

graphics geometry bezier 2d csg

14
推荐指数
2
解决办法
8019
查看次数

Makefile,模式规则和目录

我想为编译器编写一个(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)

不管用.

有任何想法吗?我想避免每个源文件的隐式规则......

makefile

14
推荐指数
1
解决办法
7294
查看次数

反转4x4矩阵 - 需要数值最稳定的解决方案

我想反转一个4x4矩阵.我的数字以定点格式存储(准确地说是1.15.16).

使用浮点运算,我通常只需构建伴随矩阵并除以行列式(例如强力解决方案).到目前为止,这对我有用,但在处理定点数时,由于使用了所有乘法,我得到了不可接受的精度损失.

注意:在定点运算中,我总是丢弃一些立即结果的最低有效位.

那么 - 反转矩阵的数值最稳定的方法是什么?我不太关心性能,但简单地说浮点就是放慢我的目标架构.

language-agnostic fixed-point matrix linear-algebra matrix-inverse

13
推荐指数
3
解决办法
9261
查看次数

加载共享库的两个实例

对于测试,我想从应用程序加载两个共享库实例.库中的代码提供了API,但它不允许我初始化库的两个(或更多)实例,因为某些函数依赖于静态变量.

我正在为这个lib编写单元测试,我想有两个实例,因为这会简化我的测试.

该库未链接到该程序.相反,我使用LoadLibrary/GetProcAddress(或Linux上的dlopen/dlsym)直接加载它.为了区分这两个库,我可以简单地为我正在加载的函数指针使用不同的名称...

以下是问题:

  • 是否可以加载这样的库两次?例如,库的所有已加载实例应该获得自己的数据段,并且不会相互影响.

  • 如果是这样:这对于Windows和Linux来说是否可移植?

c linux windows dll

13
推荐指数
1
解决办法
5993
查看次数

GCC内联汇编程序,混合寄存器大小(x86)

有谁知道如何摆脱以下汇编警告?

代码是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使用特定的寄存器(及其子寄存器),但我想将寄存器分配作业留给编译器.

x86 assembly gcc gnu-assembler

12
推荐指数
2
解决办法
5792
查看次数

posix管道是轻量级的吗?

在Linux应用程序中,我使用管道在线程之间传递信息.

使用管道的想法是我可以使用poll(2)一次等待多个管道.这在实践中运作良好,我的线程大多数时间都在睡觉.如果有事可做,他们只会醒来.

在用户空间中,管道看起来就像两个文件句柄.现在我想知道这些管道在OS端使用了多少资源.

顺便说一句:在我的应用程序中,我只是偶尔发送单个字节.把我的管道想象成简单的消息队列,它允许我唤醒接收线程,告诉他们发送一些状态数据或终止.

c linux posix pipe

12
推荐指数
2
解决办法
4041
查看次数

识别连接到Unix域套接字的程序

我有一个正在侦听Unix域套接字的程序.

当客户端连接到套接字时,我想找出连接的程序,然后决定是否允许连接(基于用户/组设置).

这可能在Linux下,如果是这样,怎么样?

linux unix-socket

11
推荐指数
2
解决办法
4461
查看次数