我在用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.   

    sigh, 你这代码,能排排版吗?
    有一个很严重的错误,在update这前,应该先把前一个select出来的m_res给close掉,不释放这块内存,有隐患的。再试一下吧。
    建议下次帖帖子,把代码好好整理一下吧,可读性不是很好。
      

  2.   

    不过好像还是有点问题啊,最多插入了170000多点,还差一些数据,然后报出了:0x10007e54 指令引用 
    0x00000000内存,该内存不能为读!
      

  3.   

    unsigned long k=0;
    char szsql[2048];
    MYSQL_RES *m_res = NULL;
    MYSQL_ROW m_row = NULL;
    unsigned long dizi=0;
        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  ;//随机产生
            //dizi 是一个递增的数值,用来产生不同阶段的随机值
    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);
    mysql_free_result(m_res);
    if (num_aa==1)//判断此处id是否存在

     
      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);
      m_row = mysql_fetch_row(m_res) ;
      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{
    zhang1_times= zhang1_times-1;
    }
     

      }
     dizi+=30000;
     
    }
      

  4.   

    为什么代码不排排版啊????浪费大家时间。
    sprintf(szsql,"SELECT * FROM map_compar where id='%d' ", id);
    这个SQL查询为何要执行两遍?
    即算有判断条件:if (num_aa==1)//判断此处id是否存在
    也只需要执行一遍查询,一样可以取出各列的值的。
    再改改吧。
    这样的代码,说实话,真的要下功夫改改了。