使用MySQL / Connector C库的C应用程序非常快地消耗内存

用户名

我很高兴在C应用程序中利用MySQL / Connector C库来操纵数据库。但是,使用该应用程序会占用大量内存,实际上,我不得不考虑利用它systemd来管理该应用程序,我认为它将在启动时作为服务运行,因为它需要始终处于活动状态。我不想进一步混淆/增加复杂性,而是要解决应用程序中的问题。

  • 系统:Raspberry Pi 4B
  • 操作系统:Raspbian Buster
  • SQL库:mariadb-connector-c-3.1.7
  • 数据库:MariaDB 10.3.22服务器,本地托管

我通常使用清除将结果集存储到MYSQL_RES对象的查询mysql_free_result(sqlRes)插入我保持相当简单。从功能的角度来看,一切都可以正常工作,但是它的内存消耗只是在屋顶。我认为这主要是由于我在main()循环代码中的等待时间所致,但是我希望能够以无阻塞方式与以115.2k进行通信的主机系统监视UART连接。

是否有我偏离路线的最佳实践?我的很多初始代码都是与此处概述的代码类似的我没有在Raspbian中使用任何内存分析应用程序,因为我不太熟悉它们。

谢谢

// MySQL/Connector C API objects for database management

MYSQL *connect;                 // MySQL object for managing connection
MYSQL_RES *sqlRes;              // When querying a results set, use this object to store them
MYSQL_ROW sqlRow;               // When iterating through results, use this object to store each
MYSQL_FIELD *sqlFields;
int mysql_query_status=0;
my_ulonglong numRows;
unsigned int numFields;

int insert_t_data(char* id, char* level, char* di)
{

 // Insert data records into database
    int strret = snprintf(insertString, 103, "INSERT INTO t_data (id, value_type, value) VALUES ('%s', '%s', '%s');", id, di, level);

    mysql_query_status = mysql_query(connect, insertString);
    if (mysql_query_status)
    {
        printf("MySQL error at Insert into t_data: %s",mysql_error(connect));
        errchk++;
        return 1;
    }

    return 0;
}

int update_tank(char* id, uint8_t sh, uint8_t sl, uint8_t ts, uint8_t alarms_anc)
{
    uint8_t hf = (alarms_anc >> 1) & 1U;

    // Insert t_data records into database
    int strret = snprintf(insertString, 100, "SELECT * FROM t WHERE description='%s' ORDER BY timestamp DESC LIMIT 1;", id);

    if ((mysql_query_status=mysql_query(connect, insertString)))      // Error in query
    {
        printf("Couldn't find existing record. Inserting new record to 't' for '%s'",id);
    }
    else      // Successful query (but not necessarily any rows)
    {
        sqlRes = mysql_store_result(connect);     // Retrieve the resulting set from this query
        numRows = mysql_num_rows(sqlRes);
        if ((sqlRes) && (numRows))
        {
            // Record already exists, proceed to update.
            mysql_free_result(sqlRes);
        }
        else
        {
            // Create a row since it wasn't there, proceed to update.
            strret = snprintf(insertString, 75, "INSERT INTO t (r_id, description) VALUES ('%d', '%s');", 4digit, id);

            mysql_query_status = mysql_query(connect, insertString);
            if (mysql_query_status)
            {
                printf("MySQL error at t: %s",mysql_error(connect));
                errchk++;
            }
        }
    }

    strret = snprintf(insertString, 150, "UPDATE t SET high='%d', low='%d', height='%d', h='%d' WHERE description='%s'", sh, sl, ts, hf, id);

    mysql_query_status = mysql_query(connect, insertString);
    if (mysql_query_status)
    {
        printf("MySQL error at t_data: %s",mysql_error(connect));
        errchk++;
        return 1;
    }

    return 0;
}

void db_connect(void)
{
    printf("Reached DB Connect.\n");
    connect = mysql_init(NULL);
    connect = mysql_real_connect(connect,SERVER,USER,PASSWORD,DATABASE,0,NULL,0);
    if ((!connect) || (connect == NULL))
    {
        printf("MySQL failed to initialize. Connection to 'db' failed.\n");
        errchk=1;           // Use errchk throughout for reconnect
    }
    else
    {
        printf("Connection successful.\n");
    }

}


int main(void)
{
    
    usleep(5000);                        // Slight delay at startup
    memset(&rbuf, '\0', sizeof(rbuf));   // Clear read buffer before communication
    bufptr=rbuf;

    db_connect();

// LOOP section ---------------

    while(TRUE)
    {
        // 1.) Read serial port for real-time updates
        // 2.) Write SQL data resulting from any updates
        // 3.) Read SQL tables for any user actions/updates
        // 4.) Write serial actions/cmds

        if (errchk > 10) {
            mysql_close(connect);
            sleep(10);
            errchk=0;
            db_connect();
        }

        usleep(100000); // Wait 100ms - This setting consumes 0.1% memory every 50 sec
        // usleep(10000);  // Wait 10 ms - Ideal - This setting consumes 0.1% memory every 10 sec 

        check_uart();   // This is a function that can trigger SQL inserts/updates

        // if new data detected, then...
        insert_t_data(id,level,di); 
        // if new updates needed, then...
        update_tank(id, sh, sl, size, alarms);

    }

    close(serial_port);
    mysql_close(connect);
}


编辑1:Valgrind日志疯狂

pi@raspberrypi:~/beehive/bin/Debug $ valgrind --leak-check=yes ./beehive
==6693== Memcheck, a memory error detector
==6693== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==6693== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==6693== Command: ./beehive
==6693== 
--6693-- WARNING: Serious error when reading debug info
--6693-- When reading debug info from /lib/arm-linux-gnueabihf/ld-2.28.so:
--6693-- Ignoring non-Dwarf2/3/4 block in .debug_info
--6693-- WARNING: Serious error when reading debug info
--6693-- When reading debug info from /lib/arm-linux-gnueabihf/ld-2.28.so:
--6693-- Last block truncated in .debug_info; ignoring
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401A5D0: index (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401A5D4: index (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4008040: _dl_dst_count (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4008288: expand_dynamic_string_token (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401AA80: strlen (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401AA84: strlen (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4017F68: malloc (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4017F74: malloc (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B5E8: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B608: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B618: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B634: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B63C: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B664: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B664: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B68C: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B6A0: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B6A4: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B6B0: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x40180A4: calloc (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4017FA8: malloc (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401A160: mmap (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Syscall param mmap2(start) contains uninitialised byte(s)
==6693==    at 0x401A174: mmap (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Syscall param mmap2(length) contains uninitialised byte(s)
==6693==    at 0x401A174: mmap (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Syscall param mmap2(offset) contains uninitialised byte(s)
==6693==    at 0x401A174: mmap (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4017F44: malloc (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x400BDD0: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B5F4: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B630: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BD7C: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BD98: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401AA14: strdup (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B660: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B660: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B688: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4008E20: _dl_map_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Syscall param openat(filename) contains uninitialised byte(s)
==6693==    at 0x4019F4C: __open64_nocancel (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x40180E4: free (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x400BB84: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BB9C: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BBBC: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BBC0: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BBE0: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BC50: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BC64: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BCA8: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BCC0: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401AA30: strlen (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401AA48: strlen (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B628: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400BD9C: _dl_new_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4005D98: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4005DC4: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4005DD0: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4005E50: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4005E9C: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4005EA0: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400602C: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x40060C0: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x40060DC: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4006114: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4006A0C: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x40061D4: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4010FF4: _dl_name_match_p (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4011008: _dl_name_match_p (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401A620: strcmp (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4010FFC: _dl_name_match_p (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x4013660: _dl_get_origin (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B680: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B684: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B690: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B694: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B6B0: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B6B4: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4013674: _dl_get_origin (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x400832C: expand_dynamic_string_token (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x40082E4: expand_dynamic_string_token (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4008114: _dl_dst_substitute (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401A67C: strcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4008198: _dl_dst_substitute (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B6A8: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B6AC: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B6B4: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x400926C: _dl_map_object (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B7A0: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B6AC: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B658: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B65C: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B668: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B66C: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B658: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B850: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B6A0: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B6A4: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B6A8: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4005FE0: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x4006020: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B648: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x401B900: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
--6693-- WARNING: Serious error when reading debug info
--6693-- When reading debug info from /lib/arm-linux-gnueabihf/libm-2.28.so:
--6693-- Ignoring non-Dwarf2/3/4 block in .debug_info
--6693-- WARNING: Serious error when reading debug info
--6693-- When reading debug info from /lib/arm-linux-gnueabihf/libm-2.28.so:
--6693-- Last block truncated in .debug_info; ignoring
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B66C: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== 
==6693== More than 100 errors detected.  Subsequent errors
==6693== will still be recorded, but in less detail than before.
==6693== Use of uninitialised value of size 4
==6693==    at 0x4005FCC: _dl_map_object_from_fd (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
--6693-- WARNING: Serious error when reading debug info
--6693-- When reading debug info from /lib/arm-linux-gnueabihf/libc-2.28.so:
--6693-- Ignoring non-Dwarf2/3/4 block in .debug_info
--6693-- WARNING: Serious error when reading debug info
--6693-- When reading debug info from /lib/arm-linux-gnueabihf/libc-2.28.so:
--6693-- Last block truncated in .debug_info; ignoring
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x400E3FC: _dl_map_object_deps (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Use of uninitialised value of size 4
==6693==    at 0x400E410: _dl_map_object_deps (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
==6693== Conditional jump or move depends on uninitialised value(s)
==6693==    at 0x401B668: memcpy (in /lib/arm-linux-gnueabihf/ld-2.28.so)
==6693== 
丹布莱克

mysql_free_result 需要发生 (sqlRes) && !(numRows)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ Mysql Connector需要提升

来自分类Dev

使用%s的Python MySQL Connector数据库查询失败

来自分类Dev

在C#中使用大型数据库运行控制台应用程序时消耗大量内存

来自分类Dev

MySQL C ++ / Connector setClientOption支持多个语句

来自分类Dev

Android mysql-connector-java库

来自分类Dev

在使用XAMPP运行MySQL时如何使用MySQL Connector / C ++和XDevAPI?

来自分类Dev

使用python库mysql.connector将csv插入MySQL数据库

来自分类Dev

使用mysql.connector将数据插入到mysql数据库中

来自分类Dev

我应该在MySQL Connector / C ++中使用哪个执行函数?

来自分类Dev

使用 MySQL Connector C++ 链接 mysqlcppconn-static 时出现问题

来自分类Dev

使用mysql.connector for python连接数据库时出错

来自分类Dev

如何解决使mysql-connector-c ++-1.1.7错误

来自分类Dev

编译MySQL Connector / C ++的examples / standalone_example.cpp失败

来自分类Dev

在MySQL Connector中使用智能指针

来自分类Dev

MySQL Connector / NET的MySqlCommand不使用参数

来自分类Dev

在IntelliJ IDEA中使用JDBC / Mysql Connector

来自分类Dev

MySQL Connector / NET的MySqlCommand不使用参数

来自分类Dev

在UWP应用程序中使用Microsoft.bot.Connector.DirectLine

来自分类Dev

无法使用 spark-atlas-connector 设置 spark 应用程序

来自分类Dev

在 MySQL Connector C++ API 中使用一个函数调用执行多个查询的正确方法是什么?

来自分类Dev

使用mysql-connector-python从mysql选择数据

来自分类Dev

Django使用`mysql.connector.django`作为数据库ENGINE后,如何打印执行的SQL语句

来自分类Dev

Ansible安装Python Mysql Connector

来自分类Dev

python mysql.connector DictCursor?

来自分类Dev

Ubuntu中的MYSQL Connector J

来自分类Dev

如何从MySQL .NET Connector通过SSL访问Amazon RDS上托管的MySQL数据库

来自分类Dev

MySQL Workbench 6-创建数据库/模式作为模型以及在MySQL Connector中的区别

来自分类Dev

MySQL Workbench 6-创建数据库/模式作为模型以及在MySQL Connector中的区别

来自分类Dev

从MySQL Connector / C查询返回的数据不是本机C数据格式吗?

Related 相关文章

  1. 1

    C ++ Mysql Connector需要提升

  2. 2

    使用%s的Python MySQL Connector数据库查询失败

  3. 3

    在C#中使用大型数据库运行控制台应用程序时消耗大量内存

  4. 4

    MySQL C ++ / Connector setClientOption支持多个语句

  5. 5

    Android mysql-connector-java库

  6. 6

    在使用XAMPP运行MySQL时如何使用MySQL Connector / C ++和XDevAPI?

  7. 7

    使用python库mysql.connector将csv插入MySQL数据库

  8. 8

    使用mysql.connector将数据插入到mysql数据库中

  9. 9

    我应该在MySQL Connector / C ++中使用哪个执行函数?

  10. 10

    使用 MySQL Connector C++ 链接 mysqlcppconn-static 时出现问题

  11. 11

    使用mysql.connector for python连接数据库时出错

  12. 12

    如何解决使mysql-connector-c ++-1.1.7错误

  13. 13

    编译MySQL Connector / C ++的examples / standalone_example.cpp失败

  14. 14

    在MySQL Connector中使用智能指针

  15. 15

    MySQL Connector / NET的MySqlCommand不使用参数

  16. 16

    在IntelliJ IDEA中使用JDBC / Mysql Connector

  17. 17

    MySQL Connector / NET的MySqlCommand不使用参数

  18. 18

    在UWP应用程序中使用Microsoft.bot.Connector.DirectLine

  19. 19

    无法使用 spark-atlas-connector 设置 spark 应用程序

  20. 20

    在 MySQL Connector C++ API 中使用一个函数调用执行多个查询的正确方法是什么?

  21. 21

    使用mysql-connector-python从mysql选择数据

  22. 22

    Django使用`mysql.connector.django`作为数据库ENGINE后,如何打印执行的SQL语句

  23. 23

    Ansible安装Python Mysql Connector

  24. 24

    python mysql.connector DictCursor?

  25. 25

    Ubuntu中的MYSQL Connector J

  26. 26

    如何从MySQL .NET Connector通过SSL访问Amazon RDS上托管的MySQL数据库

  27. 27

    MySQL Workbench 6-创建数据库/模式作为模型以及在MySQL Connector中的区别

  28. 28

    MySQL Workbench 6-创建数据库/模式作为模型以及在MySQL Connector中的区别

  29. 29

    从MySQL Connector / C查询返回的数据不是本机C数据格式吗?

热门标签

归档