native cc++代码崩溃,有没有日志报告机制

native cc++代码崩溃,有没有日志报告机制,第1张

这个貌似没有日志报告机制,不过你可以手动的添加日志明穗,来判断错误出在哪个地方C代码中罩槐正增加 #include #define LOG_TAG "System.out" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)Android.mk文件增加LOCAL_LDLIBS += -llogLOGI("info\n")通过这个可以手动的添加LOG日物悔志信息

#include <stdio.h>  

#include <stdarg.h>  

#include <time.h>  

  

int write_log (FILE* pFile, 陆行const char *format, ...) {  

    va_list arg  

    int done  

  

    va_start (arg, format)  

    //done = vfprintf (stdout, format, arg)  

  

    time_t time_log = time(NULL)  

    struct tm* tm_log = localtime(&time_log)  早迹哗

    fprintf(pFile, "%04d-%02d-%02d %02d:%02d:%02d ", tm_log->tm_year + 1900, tm_log->tm_mon + 1, tm_log->tm_mday, tm_log->tm_hour, tm_log->tm_min, tm_log->tm_sec)  

  

    done = vfprintf (pFile, format, arg)  

    va_end (arg)  

 州首 

    fflush(pFile)  

    return done  

}

同学,你是对c语言的按值传递理解不到位。

void s ( int * p_c )

{

p_contemp = ( int * ) malloc ( 5 * sizeof ( int ) )

此处为for循环控制语句依次给数组依次输入5个数

}

你最初的代码,s ( int * p_c )中,你用malloc 分配了5个int的空间,把此空间的地址赋给了p_contemp,而没有赋给指针p_c,所以p_c指向空,在main()中调用a . h_p

会出错,其为空逗闹指针。

而且就算你在s ( int * p_c )中,把malloc 分配的5个int的空间的地址赋给s的参数p_c指针,在main()中,调用a . h_p ,仍然会出错,a . h_p 仍然为空指针。

因为在c语言中函数的参数是按值传递的,即在本题中,你把a . h_p 作为实参传递给s ( int * p_c )函数,此时a.h_p为空指针,根据按值传递规则,形参p_c将与实a.h_p具有相同的值:轿指庆空。

在s ( int * p_c )内,( int * ) malloc ( 5 * sizeof ( int ) )执行后,把分配到的空间地址赋给形参p_c,此时形参p_c不为空了,但是根据按值传递原则,实参所指向的地址没变闭握,仍为空。

你所谓的“指针传递只要改一个,另一个的内容应该也做了改动”是对的,但是你的代码写的不对。你可以在函数外面弄一个指向某个地址的指针,把它传给一个参数为指针的函数,在函数内修改指针指向的内容,则在函数外实参指针指向的内容也会变。

你也可以考虑用c++的引用传递,即把你最初的s ( int * p_c )声明为s ( int * &p_c ),其它代码不变,就能看到你想要的效果。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/12543653.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存