none
一段在vc上可以执行的代码在vs上却总是报错 RRS feed

  • 问题

  • char * str="CC01000001010301110100E5DD";
      BYTE tmpByte = 0x00;
      int strLen=strlen(str);
      memset(cmd, '\0', sizeof(cmd));
      for (int i=0, j=0; i<1024,j<strLen; i++,j++)
      {   if (str[j] == ' ')    ++j; 
            tmpByte = str[j];          
            cmd[i] = ConvertHexChar(tmpByte)<<4;//左移4位  
            if (str[++j] == ' ')       ++j;  
            tmpByte = str[j];          
            cmd[i] = cmd[i] + (ConvertHexChar(tmpByte) & 0xF);//取低4位然后相加。   
      }
    2011年3月3日 8:03

答案

  • 其中cmd的声明是BYTE *cmd.这段代码在vc上执行可以的,在vs上却报错,先是 byte类型没有初始化,我便cmd=0x00.调试到cmd[i]=Con.....的时候,显示写入错误。用memset在vs里在调试的时候也有错误,应该是编译的问题。哪位高手能尽快指教下,这种问题让人崩溃


    如果你的cmd是用如下方式声明的话,那一定是有问题:

    BYTE *cmd;

    因为cmd只是指向BYTE类型的指针,这并不意味着其指向的内容已经是被分配的内存了。

    在详细解释之前,我认为你的问题可以通过将cmd的声明改为如下方式得以解决:

    BYTE cmd[1000];

    2011年3月3日 9:50
  • 一个是没有分配内存,另外最后推出函数的时候不要忘记释放内存,否则就泄露天机了。。呵呵:)
    信奎爷,无所畏惧!!
    2011年3月5日 5:00

全部回复

  • 其中cmd的声明是BYTE *cmd.这段代码在vc上执行可以的,在vs上却报错,先是 byte类型没有初始化,我便cmd=0x00.调试到cmd[i]=Con.....的时候,显示写入错误。用memset在vs里在调试的时候也有错误,应该是编译的问题。哪位高手能尽快指教下,这种问题让人崩溃
    2011年3月3日 8:35
  • 其中cmd的声明是BYTE *cmd.这段代码在vc上执行可以的,在vs上却报错,先是 byte类型没有初始化,我便cmd=0x00.调试到cmd[i]=Con.....的时候,显示写入错误。用memset在vs里在调试的时候也有错误,应该是编译的问题。哪位高手能尽快指教下,这种问题让人崩溃


    如果你的cmd是用如下方式声明的话,那一定是有问题:

    BYTE *cmd;

    因为cmd只是指向BYTE类型的指针,这并不意味着其指向的内容已经是被分配的内存了。

    在详细解释之前,我认为你的问题可以通过将cmd的声明改为如下方式得以解决:

    BYTE cmd[1000];

    2011年3月3日 9:50
  • 答案完成正确。祝微软论坛上的朋友天天开心。感谢老麟
    2011年3月4日 1:44
  • 一个是没有分配内存,另外最后推出函数的时候不要忘记释放内存,否则就泄露天机了。。呵呵:)
    信奎爷,无所畏惧!!
    2011年3月5日 5:00