小编Jos*_*ley的帖子

ERROR_NOT_ENOUGH_MEMORY故障排除

我们的应用程序在一个特定用户的计算机上失败ERROR_NOT_ENOUGH_MEMORY("没有足够的存储空间来处理此命令").

这个错误显然是在我们正在使用的Delphi VCL框架内的某个地方引发的,所以我不确定哪个Windows API函数负责.

记忆是个问题吗? 致电GlobalMemoryStatus提供以下信息:

  • dwTotalPhys - 1063150000(~1 GB)
  • dwAvailPhys - 26735000(~27 MB)
  • dwAvailPage - 1489000000(~1.4 GB)

我觉得奇怪的是,当页面文件中有足够的空间可用时,Windows会让可用的物理内存变得如此之低,但我对Windows的虚拟内存管理知之甚少,以了解这是否正常.是吗?

如果不是内存,那么哪个资源限制被命中?从我在网上看到的,ERROR_NOT_ENOUGH_MEMORY可能是应用程序遇到几个限制(GDI对象,USER对象,句柄等)的结果,而不一定是内存.是否有一个全面的列表,列出了Windows强制执行的限制?有没有办法找出受到限制的限制?我试过谷歌,但我找不到任何系统的概述.

debugging memory-management out-of-memory

5
推荐指数
1
解决办法
7768
查看次数

sin,cos,tan和舍入误差

我正在用C/C++进行一些三角计算,并且遇到了舍入错误的问题.例如,在我的Linux系统上:

#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[]) {
    printf("%e\n", sin(M_PI));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序提供以下输出:

1.224647e-16
Run Code Online (Sandbox Code Playgroud)

当正确的答案当然是0.

使用trig函数时,我可以期待多少舍入误差?我怎样才能最好地处理这个错误?我熟悉用于比较浮点数的最后位置单位技术,来自Bruce Dawson的比较浮点数,但这似乎在这里不起作用,因为0和1.22e-16相当于几个ULP.

c math floating-point trigonometry rounding

5
推荐指数
4
解决办法
6255
查看次数

如何告诉 Windows 资源管理器刷新其图标?

一旦我的安装程序完成应用程序 exe 新版本的安装,我想告诉资源管理器使用新 exe 的图标作为其快捷方式。但是,我不知道该怎么做。

从网上看,问题似乎是系统图像列表缓存了旧版本的图标。我尝试使用参数调用SHChangeNotifySHCNE_UPDATEIMAGE。我尝试致电SHUpdateImage。我什至尝试过大锤式的广播方式WM_SETTINGCHANGE。似乎什么都不起作用。

完全有可能我只是做错了什么。任何帮助,将不胜感激。

警告:下面是非常丑陋的测试代码。

#if 1
    // First attempt: using shell functions
    wchar_t icon_path[MAX_PATH];
    int icon_index;
    UINT icon_flags;

    IShellFolder *desktop_folder;
    IShellFolder *sub_folder;
    IExtractIcon *extract_icon;
    LPITEMIDLIST pidl;

    SHGetDesktopFolder(&desktop_folder);

    wchar_t *folder_path = L"C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\MyCompany\\";
    desktop_folder->ParseDisplayName(NULL, NULL, folder_path, NULL, &pidl,
        NULL);
    desktop_folder->BindToObject(pidl, NULL, IID_IShellFolder,
        (void**) &sub_folder);
    sub_folder->ParseDisplayName(NULL, NULL, L"MyApp.lnk", NULL, &pidl,
        NULL);

    sub_folder->GetUIObjectOf(NULL, 1, (LPCITEMIDLIST*) &pidl,
        IID_IExtractIcon, NULL, (void**) &extract_icon);

    extract_icon->GetIconLocation(0, icon_path, MAX_PATH,
        &icon_index, &icon_flags); …
Run Code Online (Sandbox Code Playgroud)

c icons windows-explorer windows-shell

5
推荐指数
1
解决办法
3066
查看次数

创建多个线程池(ExecutorService)可以吗?

我在代码中创建了多个 ExecutorService 实例,通常每个 UI 页面都有一个 ExecutorService 实例。每个ExecutorService实例都会执行一些http get请求线程。

private ExecutorService m_threadPool = Executors.newCachedThreadPool();
Run Code Online (Sandbox Code Playgroud)

这样做可以吗?

我遇到的问题是,有时 http get 请求从 HttpURLConnection getResponseCode() 调用中获得响应代码 -1。不知道是否是多个线程池实例导致的。

谢谢。

java android

5
推荐指数
1
解决办法
4979
查看次数

从HTML(Delphi)获取渲染的文本

我有一些HTML,我需要从页面中提取实际的书面文本。

到目前为止,我已经尝试过使用Web浏览器并呈现页面,然后转到document属性并获取文本。这有效,但仅在支持浏览器的地方(IE com对象)。问题是我希望它也能够在wine下运行,所以我需要一个不使用IE COM的解决方案。

必须有合理的编程方式来做到这一点。

html delphi html-parsing html-content-extraction

5
推荐指数
1
解决办法
3588
查看次数

如何在hudson/jenkins构建输出控制台中显示超链接

如何在hudson/jenkins构建输出控制台中显示超链接(weblink)?

我想要实现的是,在基于特定条件的hudson/jenkins构建期间,我想显示一个超链接.当用户单击该链接时,它应该打开一个新的浏览器窗口并显示该页面.

有没有插件可以做到这一点?有什么建议吗?

hudson automated-deploy hudson-plugins jenkins jenkins-plugins

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

检测对超出范围的变量的访问

像这样的代码是未定义的行为,因为它访问不再在范围内的本地变量(其生命周期已经结束).

int main() {
    int *a;
    {
        int b = 42;
        a = &b;
    }
    printf("%d", *a); // UB!
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题:有没有很好的技术可以自动检测这样的错误?它似乎应该是可检测的(当变量超出范围时将堆栈空间的部分标记为不可用,然后在访问该空间时抱怨),但Valgrind 3.10,Clang 4的AddressSanitizer和UndefinedBehaviorSanitizer,以及GCC 6的AddressSanitizer和UndefinedBehaviorSanitizer都不要不要抱怨

c c++ valgrind undefined-behavior

5
推荐指数
1
解决办法
829
查看次数

Django - 在没有{%load ..%}的情况下,通过自定义标记替换整个网站的内置模板标签

我想用这个片段中{% if %}的"smart if"自定义标签替换标准模板标签,因为我不想每次都写.此外,"smart if"将很快进入核心模板系统.{% load smart_if %}

我忘记了在哪里看到了一段执行此操作的代码.有谁知道如何更换内置的模板标签?

django django-templates

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

在Python中关闭文件

在关于运行进程并丢弃其输出的最简单方法的讨论中,我建议使用以下代码:

with open('/dev/null', 'w') as dev_null:
    subprocess.call(['command'], stdout=dev_null, stderr=dev_null)
Run Code Online (Sandbox Code Playgroud)

另一位开发者建议这个版本

subprocess.call(['command'], stdout=open('/dev/null', 'w'), stderr=STDOUT)
Run Code Online (Sandbox Code Playgroud)

我的C++程序员想说的是,当对象被释放时是一个实现细节,所以为了避免文件句柄在不确定的时间段内打开,我应该使用with.但夫妇资源提到Python总是或几乎总是使用引用计数为这样的代码,在这种情况下,文件句柄应尽快回收subprocess.call等做用with是不必要的.

(我想/dev/null特别是把文件句柄打开是不太重要的,所以假装它是一个重要的文件.)

哪种方法最好?

python file-io garbage-collection with-statement

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

Innosetup中的字符串数组

我试图在一行中的InnoSetup中的子字符串后得到一个特定的整数.有Trim,TrimLeft,TrimRight函数但没有子串提取函数.

示例:

line string:    2345
line another string:     3456
Run Code Online (Sandbox Code Playgroud)

我想提取"2345"和"3456".

我正在加载数组中的文件内容,但无法通过array [count] [char_count]取消引用它.

pascal inno-setup

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