***`./text_buffer'中的错误:损坏的双链表:0x089cbd98 **

时间:2018-08-08 19:18:24

标签: sql c linux malloc freetds

我正在尝试使用FreeTDS制作该应用。以下是我的代码

/* 
 * Purpose: Test to see if row buffering and blobs works correctly.
 * Functions: dbbind dbnextrow dbopen dbresults dbsqlexec dbgetrow
 */

#include "common.h"
#include "stdio.h"
#include<stdlib.h>
#include "readline/readline.h"
#include "readline/history.h"
#include "string.h"

int
main(int argc, char **argv)
{

  char failed;
  int hasil;
  char ch;

  char* r = malloc(30);


  LOGINREC *login;
  DBPROCESS *dbproc;
  int i;
  int p = 0;
  char teststr[1024];
  DBINT testint;
    read_login_info(argc, argv);
    fprintf(stdout, "Starting %s\n", argv[0]);


/* Fortify_EnterScope(); */

      while(1)
      {
    char qrcode[50];
    char perintahsql[100] = "select * from REF_COBA where id=";
    char *alokasi="";

    while(ch != '\n')    // terminates if user hit enter
    {
      ch = getchar();
      qrcode[p] = ch;
      p++;
}
qrcode[p]='\0';
strcpy(r,qrcode);

alokasi = strsep(&r, ",");
strcpy(r,"");
p=0;
ch = "";
dbinit();
dberrhandle(syb_err_handler);
dbmsghandle(syb_msg_handler);
fprintf(stdout, "About to logon\n");
login = dblogin();
DBSETLPWD(login, PASSWORD);
DBSETLUSER(login, USER);
DBSETLAPP(login, "text_buffer");
//DBSETLHOST(login, "ntbox.dntis.ro");
DBSETLHOST(login, "192.168.1.9");

fprintf(stdout, "About to open\n");
dbproc = dbopen(login, SERVER);
if (strlen(DATABASE))
  dbuse(dbproc, DATABASE);
dbloginfree(login);

#ifdef MICROSOFT_DBLIB
  dbsetopt(dbproc, DBBUFFER, "100");
#else
  dbsetopt(dbproc, DBBUFFER, "100", 0);
#endif

dbcmd(dbproc, strcat(perintahsql,alokasi));
dbsqlexec(dbproc);

if (dbresults(dbproc) != SUCCEED)
{
  failed = 1;
  fprintf(stdout, "Was expecting a result set.");
  exit(1);
}
fprintf(stdout, "select\n");
for (i = 1; i <= dbnumcols(dbproc); i++)
  printf("col %d is %s\n", i, dbcolname(dbproc, i));
fprintf(stdout, "setelah for\n");
dbbind(dbproc, 1, INTBIND, 0, (BYTE *) & testint);
dbbind(dbproc, 2, CHARBIND, 0, (BYTE *) teststr);

for (i = 1; i < 2; i++)
{
  char expected[1024];
  sprintf(expected, "row %03d", i);
  if (i % 100 == 0) 
  {
dbclrbuf(dbproc, 100);
  }
  if (REG_ROW != dbnextrow(dbproc))
  {
failed = 1;
fprintf(stderr, "Failed.  Expected a row\n");
//exit(1);
  }
  else
  {
fprintf(stdout, "jalanin usb\n");
printf("Read a row of data -> %d %s\n", (int) testint, teststr);
hasil = system("/opt/usb1rc_linux USB1REL-172 R");
sleep(2);
hasil = system("/opt/usb1rc_linux USB1REL-172 r");
  }

}
dbfreebuf(dbproc);
dbexit();

  }
  return 0;
 }

我从FreeTDS修改了源代码,编译后出现了一些警告

bash-4.2# make text_buffer CC text_buffer.o text_buffer.c: In function 'main': text_buffer.c:54:8: warning: assignment makes integer from pointer without a cast [enabled by default] ch = ""; ^ text_buffer.c:18:7: warning: variable 'hasil' set but not used [-Wunused-but-set-variable] int hasil; ^ text_buffer.c:17:8: warning: variable 'failed' set but not used [-Wunused-but-set-variable] char failed; ^ CC common.o CCLD text_buffer

我执行程序没有错误。该程序将检查用户的输入,然后运行sql命令。输入格式应为,例如123456,john doe,然后按Enter。输入50-60次后,将发生双向链表错误。 有人可以帮忙为什么会发生错误吗?

0 个答案:

没有答案