-1
Googleソースの一部であるネイティブアプリを強化しています。私はクラッシュを見ている。私はこれをデバッグしようとしましたが、結論できませんでした。Androidのネイティブプロセス:スタックの破損が検出されました
struct device_global {
struct support *sport;
struct support_params params;
struct global_priv *ctrl;
#if defined FEATURE_1
int freq, freq_2;
#endif /* FEATURE_1 */
#ifdef FEATURE_2
int wifi_display;
#define SUBELEMS 10
struct buf *subelem[MAX_SUBELEMS];
#endif /* FEATURE_2 */
struct list_entry *add_list_entry;
#ifdef FEATURE_3
void* my_context;
#endif /* FEATURE_3 */
};
typedef unsigned long DWORD;
typedef DWORD *PDWORD;
typedef struct
{
DWORD dwFlags;
DWORD dwErrorCode;
DWORD dwDeviceId;
#ifdef FEATURE_X
CHAR* tableFileName;
#endif
#ifdef FEATURE_Y
FILE* tableFile;
DWORD headerVersion;
DWORD headerSize;
#endif
} CONTEXT1, *CONTEXT2;
struct device_global * init(struct support_params *params)
{
struct device_global *global;
global = os_malloc(sizeof(*global));
if (params->ctrl)
global->params.ctrl = os_strdup(params->ctrl);
// Assignment of other global variables done here like above (not added here to remove clutter)
int deviceId = 0;
if (0 == getDeviceId(global->my_context, (PDWORD) &deviceId))
{
printf("Device ID 0x%x", deviceId);
}
printf("Before returning global"); // gets printed before crash
return global; // crashes here
}
DWORD getDeviceId(PVOID pContext, PDWORD myDeviceId)
{
CONTEXT2 myContext;
if (!pContext || !myDeviceId)
{
return -1;
}
else
{
myContext = (CONTEXT2) pContext;
*myDeviceId = myContext->dwDeviceId;
}
return 0;
}
"return global"のinitメソッドでクラッシュが起こっています。 printfステートメントが表示され、その後にクラッシュが表示されます。 貴重なご意見をお伝えください。
クラッシュに対応するエラーメッセージは次のとおりです。
03-16 12:30:03.230 5626 5626 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
03-16 12:30:03.232 5626 5626 F DEBUG : Abort message: 'stack corruption detected'
そして、どこにグローバルメモリを割り当てていますか? – Selvin
質問が編集されました。 mallocは 'init'メソッドで行われます。 – webgenius
構造体内のすべてのポインタは、メモリ内のいくつかのランダムな点を指すようになりました。それらのすべての使用は、ひどく墜落するでしょう – Selvin