我有一个应用程序,表现出间歇性崩溃.崩溃日志显示的堆栈跟踪对我来说很难破译,因此希望其他人看到这一点并指出我正确的方向.
基本上,应用程序在启动时执行反向地理编码请求,以显示用户在标签中的位置.另外,我为特定的API调用执行另一个反向地理编码请求.
发生的事情是有时这个MKReverseGeocoder需要很长时间才能回来.最终我假设我会收到一个失败的回调,有时我会这样做,但在此之前可能需要几分钟.
由于API调用也发出了另一个MKReverseGeocoder请求,我想也许多个并发调用存在问题?
这是我的堆栈跟踪:
Program received signal: “EXC_BAD_ACCESS”.
(gdb) backtrace
#0 0x30c237a0 in -[MKPlacemark _mapkit_cache_heapTime] ()
#1 0x30bffe60 in compareTimes ()
#2 0x32403b24 in CFBinaryHeapAddValue ()
#3 0x30c0030c in -[MKCache setObject:forKey:] ()
#4 0x30c2aa48 in -[MKReverseGeocodeCache addPlacemark:forCoordinate:] ()
#5 0x30c2251c in -[MKReverseGeocoder requester:didReceiveResponse:forRequest:] ()
#6 0x3388cc1c in -[PBRequester _tryParseData] ()
#7 0x3388b288 in -[PBRequester connection:didReceiveData:] ()
#8 0x337490ce in -[NSURLConnection(NSURLConnectionReallyInternal) sendDidReceiveData:originalLength:] ()
#9 0x33748ff0 in _NSURLConnectionDidReceiveData ()
#10 0x30899ff8 in URLConnectionClient::_clientDidReceiveData ()
#11 0x3088ca3e in URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload () …Run Code Online (Sandbox Code Playgroud) 我"Debug assertions failed!"在调试模式下运行程序时遇到此错误.我尝试在Visual C++网站上查看这个错误,但解释对我来说太先进了,他们与我对问题的最佳猜测没有任何相似之处.
我已经完成了我的代码并缩小了发生错误的点.它似乎发生在代码部分,我在计算机移动到程序的下一部分之前手动删除了一大堆堆数组.当我注释掉释放旧堆数组的部分时,程序运行得非常好.
有什么想法在这里发生?我在编程方面的知识仍然相对基础.
谢谢
我正在使用Visual C++ 2008.
更多信息:
断点在此代码块处触发:
void operator delete(
void *pUserData
)
{
_CrtMemBlockHeader * pHead;
RTCCALLBACK(_RTC_Free_hook, (pUserData, 0));
if (pUserData == NULL)
return;
_mlock(_HEAP_LOCK); /* block other threads */
__TRY
/* get a pointer to memory block header */
pHead = pHdr(pUserData);
/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));//<---- break point triggers
_free_dbg( pUserData, pHead->nBlockUse );
__FINALLY
_munlock(_HEAP_LOCK); /* release other threads */
__END_TRY_FINALLY
return;
}
Run Code Online (Sandbox Code Playgroud)
此代码来自选项卡:dbgdel.cpp
我已经"缩小"导致此问题的代码部分是这样的:
delete [] topQuadanglesPositions; …Run Code Online (Sandbox Code Playgroud) 我可以从基于x86的项目中引用Matlab代码,但不能从x64项目引用.
我可以将WCF服务构建为"任何CPU",但不是x86.当我尝试仅构建为x86时,它会出现以下错误:
---start error---
System.BadImageFormatException: Could not load file or assembly 'file:///D:\backtest\WcfServiceLibrary.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.
---end error---
Run Code Online (Sandbox Code Playgroud)
因此,我陷入困境:我如何通过WCF提供Matlab调用?它就像一些奇怪的开发者XOR形式.
关于如何(a)以32位模式编译WCF服务库,或(b)解决问题的任何想法?
我有Win7 x64,MSVS 2010.
我想我需要创建一个程序集,但是当我有多个类时,如何具体地执行此操作?似乎涉及到许多步骤并在网上搜索我找不到关于这个主题的任何文章.如果它存在,任何人都可以指向我吗?
我编写了一个安装程序来安装需要启动/停止其他服务(B)的Windows服务(A).但是,当A尝试启动/停止B时,我得到以下异常:
System.InvalidOperationException:无法在计算机'.'上打开MyService服务.---> System.ComponentModel.Win32Exception:访问被拒绝
安装程序将服务作为本地服务安装,并通过我授予的UAC弹出窗口请求管理员权限.我还在设置为要求管理员权限的服务中添加了app.manifest文件:
但我仍然得到那个错误.
这就是我启动服务的方式(停止是相同的,当然除了它调用Stop):
using (Mutex mutex = new Mutex(false, "MyServiceLock"))
{
mutex.WaitOne();
if (ServiceExists(serviceName) == true)
{
using (ServiceController serviceController = new ServiceController(serviceName, "."))
{
serviceController.Start(); // this line throws the exception
}
}
mutex.ReleaseMutex();
}
Run Code Online (Sandbox Code Playgroud)
为什么可以拒绝访问此服务?
我有3轴的加速度计值(通常只有重力包含介于-1.0和1.0之间的数据):
float Rx;
float Ry;
float Rz;
Run Code Online (Sandbox Code Playgroud)
我做了躯体计算,然后我得到每个轴的角度.
float R = sqrt(pow(Rx,2)+pow(Ry,2)+pow(Rz,2));
float Arx = acos(Rx/R)*180/M_PI;
float Ary = acos(Ry/R)*180/M_PI;
float Arz = acos(Rz/R)*180/M_PI;
Run Code Online (Sandbox Code Playgroud)
然后我在opengl中设置框角度的值
rquad = Arx;
yquad = Ary;
Run Code Online (Sandbox Code Playgroud)
哪个旋转我的盒子:
glRotatef(yquad,1.0f,0.0f,0.0f);
glRotatef(rquad,0.0f,1.0f,0.0f);
Run Code Online (Sandbox Code Playgroud)
它适用于半球.我想使用完整的球体,我知道我必须使用Arz值使其工作,但我不知道如何使用它进行此旋转.你可以帮帮我吗?
更新:最终答案在我的情况下:
rquad = -atan2(Rx/R, Rz/R)*180/M_PI;
yquad = -atan2(Ry/R, Rz/R)*180/M_PI;
Run Code Online (Sandbox Code Playgroud) 我正在尝试打开 .doc 文件并读取其内容。但我找不到任何方法可以在不启动 MSWord 的情况下执行此操作。
现在我有以下代码:
Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
object nullObject = System.Reflection.Missing.Value;
object file = @"C:\doc.doc";
Microsoft.Office.Interop.Word.Document doc = app.Documents.Open(ref file, ref nullObject, ref nullObject,
ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject,
ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject, ref nullObject,
ref nullObject);
doc.ActiveWindow.Selection.WholeStory();
doc.ActiveWindow.Selection.Copy();
IDataObject data = Clipboard.GetDataObject();
string text = data.GetData(DataFormats.Text).ToString();
doc.Close(ref nullObject, ref nullObject, ref nullObject);
app.Quit(ref nullObject, ref nullObject, ref nullObject);
Run Code Online (Sandbox Code Playgroud)
但是它启动了MSWord,有什么解决方案可以在不启动的情况下完成它吗?
我有一个需要很长时间才能加载的集合.我想要的是缓存它(APC,Memcache).无法缓存整个对象(因为它不能被反序列化并且超过1 MB).我认为缓存集合数据($ col-> getData())是可行的方法,但我发现无法基于此数组重建对象.有线索吗?
我正在移植使用大量浮点数的代码,这可能会触发从c到c ++的malloc失败.我问了一个关于我是否应该使用矢量或deques的问题,Niki Yoshiuchi慷慨地给了我一个安全包装类型的例子:
template<typename T>
class VectorDeque
{
private:
enum TYPE { NONE, DEQUE, VECTOR };
std::deque<T> m_d;
std::vector<T> m_v;
TYPE m_type;
...
public:
void resize(size_t n)
{
switch(m_type)
{
case NONE:
try
{
m_v.resize(n);
m_type = VECTOR;
}
catch(std::bad_alloc &ba)
{
m_d.resize(n);
m_type = DEQUE;
}
break;
}
}
};
Run Code Online (Sandbox Code Playgroud)
我需要一个2D矢量/ deque deques的矢量,所以我将其修改为以下代码:
template<typename T>
class VectorDeque
{
private:
enum STORAGE_CONTAINER { NONE, DEQUE, VECTOR };
std::deque<std::deque<T> > x_d,y_d,z_d;
std::vector<std::vector<T> > x_v,y_v,z_v;
TYPE my_container;
public:
void resize(size_t …Run Code Online (Sandbox Code Playgroud) 我不明白为什么以下不适用于Rails 3.我得到"未定义的局部变量或方法`custom_message'"错误.
validates :to_email, :email_format => { :message => custom_message }
def custom_message
self.to_name + "'s email is not valid"
end
Run Code Online (Sandbox Code Playgroud)
我也尝试使用:message =>:custom_message,而不是像rails-validation-message-error帖子中建议的那样 没有运气.
:email_format是位于lib文件夹中的自定义验证器:
class EmailFormatValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
unless value =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
object.errors[attribute] << (options[:message] || 'is not valid')
end
end
end
Run Code Online (Sandbox Code Playgroud)