小编Sco*_*ott的帖子

当你在malloc之后没有自由时真正发生了什么?

这已成为困扰我多年的事情.

我们都在学校(至少,我是)教过你必须释放每个分配的指针.不过,我有点好奇,关于不释放内存的实际成本.在一些明显的情况下,就像在malloc循环内部或线程执行的一部分中调用时一样,释放是非常重要的,因此没有内存泄漏.但请考虑以下两个例子:

首先,如果我的代码是这样的:

int main()
{
    char *a = malloc(1024);
    /* Do some arbitrary stuff with 'a' (no alloc functions) */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里真正的结果是什么?我的想法是,进程死了,然后堆空间无论如何都没有了,因此错过调用没有任何害处free(但是,我确实认识到无论如何都要将它关闭,可维护性和良好实践的重要性).我对这个想法是对的吗?

其次,假设我的程序有点像shell.用户可以声明类似的变量,aaa = 123并将其存储在某些动态数据结构中供以后使用.很明显,你可以使用一些解决方案来调用一些*alloc函数(hashmap,链表,类似的东西).对于这种程序,在调用之后永远自由是没有意义的,malloc因为这些变量必须在程序执行期间始终存在,并且没有好的方法(我可以看到)用静态分配的空间来实现它.拥有一堆已分配但仅作为流程结束的一部分释放的内存,这是不好的设计吗?如果是这样,有什么替代方案?

c malloc free

515
推荐指数
12
解决办法
11万
查看次数

使用git删除非存储库文件?

我正在编写Autotools代码,在开发过程中,会生成大量文件.

有没有告诉git从目录中删除不属于存储库的所有文件?

git

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

如何在源代码中使用package_data中的数据?

在setup.py中,我已经指定了package_data,如下所示:

packages=['hermes'],
package_dir={'hermes': 'hermes'},
package_data={'hermes': ['templates/*.tpl']},
Run Code Online (Sandbox Code Playgroud)

我的目录结构粗略

hermes/
 |
 | docs/
 | ...
 | hermes/
    | 
    | __init__.py
    | code.py
    | templates
        |
        | python.tpl
 |
 | README
 | setup.py
Run Code Online (Sandbox Code Playgroud)

问题是我需要在源代码中使用templates目录中的文件,这样我就可以写出python代码(这个项目是一个解析器生成器).我似乎无法弄清楚如何正确地包含和使用我的代码中的这些文件.有任何想法吗?

python distutils build setuptools distribute

33
推荐指数
1
解决办法
9850
查看次数

如何在C中覆盖stdout

在大多数现代shell中,您可以点击向上和向下箭头,它会在提示符下放置您执行的先前命令.我的问题是,这是如何工作的?!

在我看来,shell以某种方式操纵stdout来覆盖它已经编写的内容?

我注意到像wget这样的程序也可以这样做.有人知道他们是怎么做到的吗?

c terminal console stdout

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

HTTP中的多个Set-cookie标头

我正在编写一个充当非常基本的HTTP客户端的小类.作为我正在进行的项目的一部分,我正在让它识别cookie.但是,我不清楚当我的客户端收到多个具有相同密钥但设置了不同值的"Set-Cookie"标头时会发生什么.

例如,

Set-Cookie: PHPSESSID=abc; path=/
Set-Cookie: PHPSESSID=def; path=/
Set-Cookie: PHPSESSID=ghi; path=/
Run Code Online (Sandbox Code Playgroud)

其中哪一项应该是PHPSESSID的价值?当您在同一页面上调用session_start()然后调用session_regenerate_id()时,通常会发生这种情况.每个都会设置自己的标题.所有的浏览器似乎都没有这个,但我似乎无法让我的客户选择正确的.

有任何想法吗?!

browser http http-headers

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

多行正则表达式搜索和替换!

我撞墙了.有没有人知道一个好的文本编辑器,它有像Notepad ++一样的搜索和替换,但也可以进行多行正则表达式搜索和替换?基本上,我试图找到一些可以匹配正则表达式的东西:

搜索oldlog\(.*\n\s+([\r\n.]*)\);
替换newlog\(\1\)

有任何想法吗?

regex text-editor

27
推荐指数
6
解决办法
5万
查看次数

NCurses初始化而不清除屏幕

我正在编写一个类似于shell的程序.启动后,会出现提示并输入一些特定于应用程序的命令.

到目前为止这个工作正常.但是,我想在Bash中添加对命令历史记录的支持,因此用户可以点击向上或向下箭头并查看以前输入的命令.

我已经包含了ncurses库,我用getch()做了一个简单的hello world测试,以确保正确报告向上和向下箭头.

困扰我的是,似乎要求我调用initscr()来清除屏幕以便我使用getch().

好的,问题是:

有没有人知道如何使用ncurses getch()函数而不先调用initscr()?如果没有,我可以让它不清楚屏幕吗?基本上,我希望getch()的行为与getchar()相同,如果这有意义的话.

提前致谢!

编辑:我认为最好的例子是Python如何在交互模式下运行.

c ncurses

9
推荐指数
3
解决办法
4826
查看次数

C成语和鲜为人知的事实

好的,我在这里看过很多关于C中奇怪的习语和常见做法的帖子,这些帖子可能最初并不直观.也许有几个例子是有序的

数组中的元素:

#define ELEMENTS(x) (sizeof (x) / sizeof (*(x)))
Run Code Online (Sandbox Code Playgroud)

奇数数组索引:

a[5] = 5[a]
Run Code Online (Sandbox Code Playgroud)

单行if/else/while /为安全#defines

#define FOO(X) do { f(X); g(X); } while (0)
#define FOO(X) if (1) { f(X); g(X); } else
Run Code Online (Sandbox Code Playgroud)

我对专家C程序员的问题是:在C代码中有哪些成语,实践,代码snippits鲜为人知的事实,但可能不是很直观,但是对C编程提供了很好的洞察力?

c arrays macros

7
推荐指数
3
解决办法
4161
查看次数

在Python中为字符串实现lookahead迭代器

我正在做一些需要一个前瞻标记的解析.我想要的是一个快速函数(或类?),它将采用迭代器并将其转换为表单中的元组列表(token,lookahead),这样:

>>> a = ['a', 'b', 'c', 'd']
>>> list(lookahead(a))
[('a', 'b'), ('b', 'c'), ('c', 'd'), ('d', None)]
Run Code Online (Sandbox Code Playgroud)

基本上,这对于在这样的迭代器中展望是很方便的:

for (token, lookahead_1) in lookahead(a):
  pass
Run Code Online (Sandbox Code Playgroud)

虽然,我不确定在itertools中是否有这个技术或功能的名称已经会这样做.有任何想法吗?

谢谢!

python algorithm

7
推荐指数
3
解决办法
1395
查看次数

C中的正则表达式

我很好奇,有人知道在C中进行正则表达式匹配的好方法吗?我能想到的唯一方法是通过Flex.这是唯一的方式还是有更好的方法?

谢谢!

c regex

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