我的程序中有一个相当严重的错误 - 偶尔调用new()会抛出bad_alloc.
从我在bad_alloc上找到的文档中,似乎抛出了以下原因:
当计算机内存不足时(肯定没有发生,我有4GB的RAM,程序在使用少于5MB(在taskmanager中检查)时抛出bad_alloc,后台没有严重的运行).
如果内存变得过于分散而不能分配新的块(这也不太可能 - 我分配的最大块大小约为1KB,并且在崩溃发生之前不会超过100次).
基于这些描述,我真的没有任何可以抛出bad_alloc的地方.
但是,我运行的应用程序运行多个线程,这可能会导致问题.通过测试单个线程上的所有对象,一切似乎都顺利进行.我能想到的另一件事就是在这里发生的某种竞争条件可能是因为同时在多个地方调用new()而引起的,但我尝试添加互斥锁来防止这种行为发生没有效果.
因为该程序是几百行,我不知道问题究竟在哪里,我不知道发布的代码片段是什么(如果有的话).相反,我想知道是否有任何工具可以帮助我测试这种事情,或者是否有任何一般策略可以帮助我解决这个问题.
我正在使用Microsoft Visual Studio 2008,Poco用于线程化.
我使用VS2008目标.NET 2.0框架,以防万一,不,我不能改变这个:)
我DateCalculator上课了.其方法GetNextExpirationDate尝试在内部使用DateTime.Today作为基线日期来确定下一个到期时间.
在我编写单元测试时,我意识到我想测试GetNextExpirationDate不同的"今天"日期.
最好的方法是什么?以下是我考虑过的一些替代方案:
baselineDate仅在单元测试中使用它.在实际的客户端代码,忽略了赞成票默认方法的属性/重载方法baselineDate来DateTime.Today.我不愿意这样做,因为它使得DateCalculator类的公共接口变得笨拙.baselineDate内部设置为的受保护字段DateTime.Today.测试时,DateCalculatorForTesting从构造函数派生DateCalculator并设置baslineDate.它使公共接口保持干净,但仍然不是很好 - baselineDate受到保护并且需要派生类,这两者都仅用于测试.ExtensionAttribute,然后意识到它不起作用,因为扩展方法无法访问私有/受保护的变量.我最初认为这是一个非常优雅的解决方案.:(我有兴趣听听别人的想法.
我有一些代码可以从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) DataGridColumnHeader发生了什么?看起来当DataGrid移动到PresentationFramework时它被删除了.
我已经从 geonames.org 下载了整个数据库并将所有国家/地区导入 mysql。
我想知道当我得到一个城市的 id 时我怎么能得到大陆、国家、州、县?
因为我想用这些信息制作一个级联列表菜单。
谢谢!
我的项目是在MFC中开发的,这是一个未经编码的代码.现在我需要通过重用大多数MFC类在C#中创建一个类似的应用程序.
是否可以直接从MFC dll导出class/struct/enum,这样我就可以使用dllimport在我的C#中导入它并使用它.
很多人都说苹果限制它以获得更好的性能.如果是这样,Apple应该增加RAM的大小以支持多任务处理.所以Apple不允许这样做.其他人说Cocoa Touch应用程序无法进行多任务处理,因为iPhone上只有一个窗口和视图.
我无法理解这是什么原因?请澄清我.
在clojure中,关键字评估自己,例如:
>>:test
:test
Run Code Online (Sandbox Code Playgroud)
它们不接受任何参数,并且它们不受任何限制.那么,为什么我们需要在命名空间中限定关键字?
我知道isa使用derive需要命名空间限定的关键字(例如::test)创建层次结构.是否还有其他需要将关键字放在命名空间中的情况?
我有点问题.基本上,我需要在我的程序中存储大量列入白名单的条目,我想直接包含这样的列表 - 我不想分发其他库等等,我不想将字符串嵌入到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) 这是用于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方法?
c# ×2
c++ ×2
iphone ×2
bad-alloc ×1
boolean ×1
clojure ×1
database ×1
datetime ×1
debugging ×1
dll ×1
geonames ×1
keyword ×1
literals ×1
long-integer ×1
managed ×1
mfc ×1
mysql ×1
namespaces ×1
objective-c ×1
pdf ×1
pypdf ×1
python ×1
static ×1
unit-testing ×1
unmanaged ×1
wpf ×1
wpf-4.0 ×1
wpfdatagrid ×1
xcode ×1