символьный указатель на строку, затем на массив строк. *** Ошибка в `./a.out ‘: malloc (): повреждение памяти: 0x0900c3b0 ***

Я получаю эту ошибку:
* Ошибка в `./a.out ‘: malloc (): повреждение памяти: 0x0900c3b0 *

Я пытаюсь преобразовать символьный указатель в строку, а затем поместить эту строку в массив строк для дальнейшего использования. Я не понимаю, почему это не работает. Я предполагаю, что строка, которую я поместил в массив, будет удалена, и это может быть причиной.

Ошибка происходит, когда я делаю новую строку (firstByte)

Вот код:

char *entries[16] = {nullptr};string *strEntries[16] = {nullptr};
char * firstByte = 0;
stringstream s;
size_t len;

string sfB;
firstByte = new char[sizeof(char)];
count = (FirstRootDirSec*512) + 32;
lseek(fd, count, SEEK_SET); //Takes us to 32 bytes after root directory, or first entry

//so either find a way to just read in one byte at a time, or
//take the first character of firstByte. firstbyte[0]. That's probably good.
for(int i = 0; i<16; i++){
//check first byte
//if first byte is a 41 or 40, then it is a long directory, and then we can jump ahead 32 bytes, or 0x20lseek(fd, count, SEEK_SET); //Takes us to 32 bytes after
read(fd, firstByte, count);
count+=32;

if(firstByte[2] != '\0'){
//then not a long entry, and we can put it in entries.
//       string str(firstByte);//error happens when I do new string(firstByte)
**entries[i] = firstByte;
strEntries[i] = new string(firstByte);
cout<<entries[i]<<"blah"<<endl;**

}
}

0

Решение

Вы выделяете массив, достаточно большой для одного байта:

firstByte = new char[sizeof(char)];

где sizeof(char) довольно запутанный способ написания 1,

Затем вы пытаетесь прочитать более одного байта в этот массив:

read(fd, firstByte, count);

списание конца массива и разрушение кучи.

Это выглядит как count неверное число байтов для чтения здесь, так как вы только что использовали одну и ту же переменную, чтобы указать, где в файле искать. Вам нужно выяснить, сколько байтов вы действительно хотите прочитать каждый раз, и убедиться, что у вас достаточно большой массив для этого.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector