问题列表 - 第23516页

调试策略找到bad_alloc的原因

我的程序中有一个相当严重的错误 - 偶尔调用new()会抛出bad_alloc.

从我在bad_alloc上找到的文档中,似乎抛出了以下原因:

  1. 当计算机内存不足时(肯定没有发生,我有4GB的RAM,程序在使用少于5MB(在taskmanager中检查)时抛出bad_alloc,后台没有严重的运行).

  2. 如果内存变得过于分散而不能分配新的块(这也不太可能 - 我分配的最大块大小约为1KB,并且在崩溃发生之前不会超过100次).

基于这些描述,我真的没有任何可以抛出bad_alloc的地方.

但是,我运行的应用程序运行多个线程,这可能会导致问题.通过测试单个线程上的所有对象,一切似乎都顺利进行.我能想到的另一件事就是在这里发生的某种竞争条件可能是因为同时在多个地方调用new()而引起的,但我尝试添加互斥锁来防止这种行为发生没有效果.

因为该程序是几百行,我不知道问题究竟在哪里,我不知道发布的代码片段是什么(如果有的话).相反,我想知道是否有任何工具可以帮助我测试这种事情,或者是否有任何一般策略可以帮助我解决这个问题.

我正在使用Microsoft Visual Studio 2008,Poco用于线程化.

c++ debugging bad-alloc

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

如何针对单元测试目的改变"今天的日期"?

我使用VS2008目标.NET 2.0框架,以防万一,不,我不能改变这个:)

DateCalculator上课了.其方法GetNextExpirationDate尝试在内部使用DateTime.Today作为基线日期来确定下一个到期时间.

在我编写单元测试时,我意识到我想测试GetNextExpirationDate不同的"今天"日期.

最好的方法是什么?以下是我考虑过的一些替代方案:

  • 使用参数公开property/overloaded方法,baselineDate仅在单元测试中使用它.在实际的客户端代码,忽略了赞成票默认方法的属性/重载方法baselineDateDateTime.Today.我不愿意这样做,因为它使得DateCalculator类的公共接口变得笨拙.
  • 创建一个baselineDate内部设置为的受保护字段DateTime.Today.测试时,DateCalculatorForTesting从构造函数派生DateCalculator并设置baslineDate.它使公共接口保持干净,但仍然不是很好 - baselineDate受到保护并且需要派生类,这两者都仅用于测试.
  • 使用扩展方法.我在添加之后尝试了这个ExtensionAttribute,然后意识到它不起作用,因为扩展方法无法访问私有/受保护的变量.我最初认为这是一个非常优雅的解决方案.:(

我有兴趣听听别人的想法.

c# datetime unit-testing

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

如何使用PyPdf在pdf文件中逐行阅读?

我有一些代码可以从pdf文件中读取.有没有办法在Windows上使用Pypdf,Python 2.6在pdf文件(而不是页面)中逐行读取?

以下是阅读pdf页面的代码:

import pyPdf

def getPDFContent(path):
    content = ""
    num_pages = 10
    p = file(path, "rb")
    pdf = pyPdf.PdfFileReader(p)
    for i in range(0, num_pages):
        content += pdf.getPage(i).extractText() + "\n"
    content = " ".join(content.replace(u"\xa0", " ").strip().split())
    return content
Run Code Online (Sandbox Code Playgroud)

更新:

通话代码是这样的:

f= open('test.txt','w')
pdfl = getPDFContent("test.pdf").encode("ascii", "ignore")
f.write(pdfl)
f.close()
Run Code Online (Sandbox Code Playgroud)

python pdf pypdf

25
推荐指数
3
解决办法
6万
查看次数

WPF 4:DataGridColumnHeader发生了什么?

DataGridColumnHeader发生了什么?看起来当DataGrid移动到PresentationFramework时它被删除了.

wpf wpfdatagrid wpf-4.0 datagridcolumnheader

6
推荐指数
1
解决办法
1790
查看次数

使用 geonames 数据库获取城市所属的州和县?

我已经从 geonames.org 下载了整个数据库并将所有国家/地区导入 mysql。

我想知道当我得到一个城市的 id 时我怎么能得到大陆、国家、州、县?

因为我想用这些信息制作一个级联列表菜单。

谢谢!

mysql database geonames

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

使用托管代码中的非托管代码

我的项目是在MFC中开发的,这是一个未经编码的代码.现在我需要通过重用大多数MFC类在C#中创建一个类似的应用程序.

是否可以直接从MFC dll导出class/struct/enum,这样我就可以使用dllimport在我的C#中导入它并使用它.

c# dll mfc unmanaged managed

6
推荐指数
1
解决办法
1636
查看次数

为什么iPhone不支持多任务处理?

很多人都说苹果限制它以获得更好的性能.如果是这样,Apple应该增加RAM的大小以支持多任务处理.所以Apple不允许这样做.其他人说Cocoa Touch应用程序无法进行多任务处理,因为iPhone上只有一个窗口和视图.

我无法理解这是什么原因?请澄清我.

iphone

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

什么时候应该将clojure关键字放在命名空间中?

在clojure中,关键字评估自己,例如:

>>:test
:test
Run Code Online (Sandbox Code Playgroud)

它们不接受任何参数,并且它们不受任何限制.那么,为什么我们需要在命名空间中限定关键字?

我知道isa使用derive需要命名空间限定的关键字(例如::test)创建层次结构.是否还有其他需要将关键字放在命名空间中的情况?

namespaces clojure keyword

31
推荐指数
2
解决办法
4914
查看次数

如何在C++源代码中包含极长的文字?

我有点问题.基本上,我需要在我的程序中存储大量列入白名单的条目,我想直接包含这样的列表 - 我不想分发其他库等等,我不想将字符串嵌入到Win32资源中,出于一些我不想立即进入的原因.

我只是在我的.cpp文件中包含了我的大白名单,并且出现了这个错误:

1>ServicesWhitelist.cpp(2807): fatal error C1091: compiler limit: string exceeds 65535 bytes in length
Run Code Online (Sandbox Code Playgroud)

字符串本身大约是VC++允许限制的两倍.在程序中包含如此大的文字的最佳方法是什么?

编辑:

我正在存储这样的字符串:

const std::wstring servicesWhitelist
(
 L".NETFRAMEWORK|"
 L"_IOMEGA_ACTIVE_DISK_SERVICE_|"
 L"{6080A529-897E-4629-A488-ABA0C29B635E}|"
 L"{834170A7-AF3B-4D34-A757-E05EB29EE96D}|"
 L"{85CCB53B-23D8-4E73-B1B7-9DDB71827D9B}|"
 L"{95808DC4-FA4A-4C74-92FE-5B863F82066B}|"
 L"{A7447300-8075-4B0D-83F1-3D75C8EBC623}|"
 L"{D31A0762-0CEB-444E-ACFF-B049A1F6FE91}|"
 L"{E2B953A6-195A-44F9-9BA3-3D5F4E32BB55}|"
 L"{EDA5F5D3-9E0F-4F4D-8A13-1D1CF469C9CC}|"
 L"2WIREPCP|"
//About 3800 more lines
);
Run Code Online (Sandbox Code Playgroud)

EDIT2 它在运行时以类似于此的方式使用:

static const boost::wregex servicesWhitelistRegex(servicesWhitelist);
std::wstring service;
//code to populate service
if (!boost::regex_match(service, servicesWhitelistRegex))
 //Do something to print service
Run Code Online (Sandbox Code Playgroud)

c++ literals long-integer

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

如何在main.m中调用静态bool方法

这是用于iPhone的Xcode中的Objective-C.

我在main.m中有一个方法:

int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

//I want to call the method here//

int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

static BOOL do_it_all () {
//code here//
}
Run Code Online (Sandbox Code Playgroud)

如何从main.m调用do_it_all方法?

iphone xcode static boolean objective-c

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