C ++脏字符*

时间:2014-05-20 20:13:07

标签: c++ opencv vector char

我已将此功能用于读取目录中的照片:

vector<Mat> vImg;
Mat rImg;

DIR *dir;
struct dirent *file;
int count = 0;
std::vector<char*> arr; 

if(argc >= 2){
char* imgFolder = argv[1];
if ((dir = opendir(imgFolder)) != NULL) {
  while ((file = readdir(dir)) != NULL) {        
    std::string fn = file->d_name;
    std::string ext = StringToUpper(fn.substr(fn.find_last_of(".") + 1));
    if(ext == "JPG" || ext == "PNG" || ext == "JPEG") {
      count += 1;  
      char* itm = new char[100];
      strcat(itm, imgFolder);
      strcat(itm, "/");
      strcat(itm, file->d_name);
      printf("%s\n",itm);
      vImg.push_back(imread(itm));
    }
  }
  closedir (dir);

问题在于第一次

之后
vImg.push_back(imread(itm));

所有其他&#34; itm&#34;像这样弄脏了:

enter image description here

有人可以帮帮我吗? 谢谢! :)

1 个答案:

答案 0 :(得分:4)

你的错误在这里:

  char* itm = new char[100];
  strcat(itm, imgFolder);  // <-- oops

第一个strcat应为strcpy。否则,你会附加到未初始化的内存中。

此外,您永远不会在任何地方删除char数组。