Mar*_*los 1 c c++ string pointers
我正在写一个返回一些数据的C++代码,问题是:每当我从另一个文件调用它时,我的const char都会丢失它的值.我不知道发生了什么.
我在ProcClient.h上的代码
virtual void reportWorkflowError(unsigned int workflow,
const dp::String& errorCode) {
char message[1000];
snprintf(message, 1000, "Workflow: %s ERROR: %s", workflowToString(
workflow).utf8(), errorCode.utf8());
printf("[%s]", message);
errorInfo = message;
}
virtual const char * getErrorInfo() {
return errorInfo;
}
Run Code Online (Sandbox Code Playgroud)
[工作流程:DW_FULFILL错误:E_ADEPT_NO_TOKEN]
[工作流程:错误:E_ADEPT_NOT_READY]
//抛出两个错误,errorInfo应该是最后一个
在Services.cpp上我启动一个"工作流程",如果它抛出一个错误,则调用上面的监听器,之后我应该得到lastError指针.
// g_drmClient是ProcClient
bool RMServices::startFullfilment(dp::String acsm) {
//Do things
g_drmClient->getProcessor()->startWorkflows(dpdrm::DW_FULFILL);
size_t count = g_drmClient->getProcessor()->getFulfillmentItems();
printf("Number of items fulfilled: %d\n", count);
bool returnValue = !g_drmClient->hasError();
if (!returnValue)
lastError = g_drmClient->getErrorInfo());
printf("[%s]", lastError);
return returnValue;
}
Run Code Online (Sandbox Code Playgroud)
在这里它打印:[\æ¾°¯¯¯¯| |æ¾\æ¾er的项目更充分的迭代]
发生了什么?
char message[1000];
Run Code Online (Sandbox Code Playgroud)
是驻留在堆栈上的局部变量,在返回时超出范围reportWorkflowError.所以,
errorInfo = message; // errorInfo is simply pointing to garbage on method return.
Run Code Online (Sandbox Code Playgroud)
在这些方面做一些事情 -
void className::foo()
{
char stackVariable[] = "abcdef" ;
classVariableCharPointer = new char[ sizeof(stackVariable) + 1 ] ;
strcpy( classVariableCharPointer, stackVariable ) ;
}
Run Code Online (Sandbox Code Playgroud)
还记得classVariableCharPointer使用析构函数解除分配delete[].
| 归档时间: |
|
| 查看次数: |
1504 次 |
| 最近记录: |