我在用vc写程序,写随机数插入数据如下:
 for (int i=0;i<20;i++)
{
  
  
srand((unsigned)time(NULL)); /*设置种子,并生成伪随机序列*/  for( int zhang1_times=0;zhang1_times<10000;zhang1_times++)

unsigned int x ,MAX = 30000;  x = rand() % MAX; // 产生[0,MAX)    
unsigned long id =dizi + x ;//随机产生
    
sprintf(szsql,"SELECT * FROM map_compar where id='%d' ", id);   
if (mysql_real_query(&mysql, szsql, strlen(szsql)) != 0) {   
}
m_res = mysql_store_result(&mysql);
int num_aa= mysql_num_rows(m_res);
if (num_aa==1)
{  
  
m_row = mysql_fetch_row(m_res) ;
  
int type1 = atoi(m_row[6]);
if (type1==0)
{
  
sprintf(szsql,"update map_compar set type='7' where id='%d' ", id);   
mysql_query(&mysql,szsql);
}else{
zhang1_times = zhang1_times-1;
}  
}else{
zhang1_times= zhang1_times-1;
}
  }
dizi+=30000;
}会出现错误: 0x10007e54 指令引用的0x00000000内存。该内存不能为读,请教这是为什么?我想插入20w,只插入了6w左右就这样了!

解决方案 »

  1.   

    试试下边这个吧:排了一下版,注意free result以及出错处理。
    你需要调试程序。for (int i=0;i<20;i++)
    {
        srand((unsigned)time(NULL)); /*设置种子,并生成伪随机序列*/
        for( int zhang1_times=0;zhang1_times<10000;zhang1_times++)
        { 
            unsigned int x ,MAX = 30000;
            x = rand() % MAX; // 产生[0,MAX)        unsigned long id =dizi + x ;//随机产生
            sprintf(szsql,"SELECT * FROM map_compar where id='%d' ", id);  
            if (mysql_real_query(&mysql, szsql, strlen(szsql)) != 0) 
            {
                // 既然要判断是否出错,难道不能打印出错误消息, break出来
                printf("fatal error: %s\n", mysql_error(&mysql));
                break;
            }
            m_res = mysql_store_result(&mysql);
            int num_aa= mysql_num_rows(m_res);
            
            if (num_aa==1)
            {  
                m_row = mysql_fetch_row(m_res) ;
                // 没办法,只能fetch完之后再free
                mysql_free_result(m_res);
                int type1 = atoi(m_row[6]);
                if (type1==0)
                {
                    sprintf(szsql,"update map_compar set type='7' where id='%d' ", id);  
                    mysql_query(&mysql,szsql);
                }
                else
                {
                    zhang1_times = zhang1_times-1;
                }
            }
            else
            {
                mysql_free_result(m_res);
                zhang1_times= zhang1_times-1;
            }
            
        }
        dizi+=30000;
    }