I hate SIGSEGV

This commit is contained in:
PoliEcho 2024-12-18 21:35:38 +01:00
parent 75f8b35464
commit 3c46d64137

View File

@ -48,34 +48,41 @@ int main() {
} }
} }
} }
printDiskMap(diskmap); printDiskMap(diskmap);
{ {
int Dot; int dotFound;
auto offset = diskmap.begin(); auto offset = diskmap.begin();
int block_count; int block_count;
while (std::find(diskmap.begin(), diskmap.end(), -1) != diskmap.end()) { while (std::find(diskmap.begin(), diskmap.end(), -1) != diskmap.end()) {
while (true) {Dot = // Removes empty blocks at the end
std::find(diskmap.begin(), diskmap.end(), -1) - diskmap.begin(); if (diskmap.back() == -1) {
if(diskmap.back() == -1) { diskmap.pop_back();
diskmap.pop_back(); continue;
continue; }
}
block_count =
std::find(diskmap.begin(), diskmap.end(), -1) - diskmap.begin();count(diskmap.end(),diskmap.begin(),diskmap.back());
while (true) { // counts how many blocks are in file
Dot = block_count = std::count(diskmap.end(), diskmap.begin(), diskmap.back());
std::find(offset, diskmap.end(), -1) - diskmap.begin();
if(std::count(diskmap.begin() + Dot,diskmap.end(), -1) == block_count) {} while (true) {
dotFound = std::find(offset, diskmap.end(), -1) - diskmap.begin();
if (std::count(diskmap.begin() + dotFound,
diskmap.begin() + dotFound + block_count,
-1) == block_count) {
std::fill(diskmap.begin() + dotFound,
diskmap.begin() + dotFound + block_count, diskmap.back());
for (int i = 0; i < block_count; i++) {
diskmap.pop_back();
}
break;
} else {
offset = diskmap.begin() + dotFound + block_count;
} }
} }
Dot =
std::find(diskmap.begin(), diskmap.end(), -1) - diskmap.begin();
std::cout << "first dot: " << Dot << std::endl;
diskmap[Dot] = diskmap.back();
diskmap.pop_back();
printDiskMap(diskmap); printDiskMap(diskmap);
} }
} }