调用Void指针缓冲区参数会引发运行时错误

时间:2016-03-18 22:27:41

标签: c++ unit-testing

我的功能如下:

void Dump(uint32_t sig, const void *buf, int bytes_to_send) {
}

需要从UT代码调用。

我尝试使用以下代码段来调用它:

方法一:

  // string to char* - but thats not what I want
  string *pStr = new string("Where is my place in Memory?");
  uint32_t sig = 4;
  Dump(sig,pStr,100);

方法2:

  // char to string
  char tab[4];
  tab[0] = 'c';
  tab[1] = 'a';
  tab[2] = 't';
  tab[3] = '\0';
  Dump(4,&tab,sizeof(tab));

方法3:

  int i=0;
  char aPointer[] = "I love earth and all its creatures.";
  char *pCarrier[sizeof(aPointer)]; 
  for (i = 0; i < sizeof(aPointer); i++)
      pCarrier[i] = &aPointer[i];
  Dump(4,pCarrier ,sizeof(aPointer));

Everything Compiles但RunTime行为是错误,如

Invalid read of size 2
==16492==    at 0x4A08DAC
==16492== Invalid read of size 8
Memcheck:Addr2

其他错误

==24108== Use of uninitialised value of size 8

请分享一些朋友的建议!!

1 个答案:

答案 0 :(得分:1)

  1. 方法1无法正常工作,因为Dump()不知道string*是什么 或者怎么做
  2. 方法2因为您发送tab而非tab的地址而无法正常工作。
  3. 方法3无法正常工作,因为它使用每个元素aPointer的地址填充数组。
  4. 尝试:

    char message[] = "My message";
    const size_t len = strlen(message);
    Dump(4, message, len);