Memory issue with new[] and delete[]
Code:
fseek(handle, 0, SEEK_END);
int filesize = ftell(handle);
rewind (handle);
char* file_buffer = new char[filesize + 1];
fread (file_buffer, filesize, 1, handle);
file_buffer = strchr(file_buffer, '\n') + 1;
file_buffer = strchr(file_buffer, '\n') + 1;
delete[] file_buffer;
At that delete occurs a segmentation fault. I don't understand why, and it's increasingly agrivating as I've been dealing with this for hours and now the variable I need to be able to clear has this same issue.
it is NOT a lack of memory problem
it is NOT a lack of space assigned, I've tried everything from just the filesize to +1500, and this file is a 63byte file o_0
I highly doubt it's a problem from somewhere other than there, but here is the rest of the function at least...
Code:
int config::set_dest () {
// Load the file and cut it down to the dest section
fseek(handle, 0, SEEK_END);
int filesize = ftell(handle);
rewind (handle);
char* file_buffer = new char[filesize + 1500];
fread (file_buffer, filesize, 1, handle);
file_buffer = strchr(file_buffer, '\n') + 1;
file_buffer = strchr(file_buffer, '\n') + 1;
int loop;
char* tracker = new char[strlen(file_buffer) + 1500];
if (strcpy(tracker, file_buffer) == NULL) {
delete[] tracker;
delete[] file_buffer;
return -1;
}
for (loop = 1; tracker = strchr(tracker, '\n'); loop++) {
tracker++;
if (strchr(tracker, '\n') == NULL) {
if (strlen(tracker) > 0)
loop++;
break;
}
if (strlen(tracker) == strlen(strchr(tracker, '\n')))
loop--;
}
dest_num = loop;
if (dest_num < 1) {
delete[] tracker;
delete[] file_buffer;
return -2;
}
dest = new char*[dest_num];
delete[] tracker; //Seg fault
tracker = new char[strlen(file_buffer) - strlen(strchr(strchr(file_buffer, '\n') + 1, '\n')) + 1];
if (strncpy(tracker, strchr(file_buffer, '\n') + 1, strlen(file_buffer) - strlen(strchr(strchr(file_buffer, '\n') + 1, '\n'))) == NULL) {
delete[] tracker;
delete[] file_buffer;
return -1;
}
delete[] file_buffer; // Seg fault
for (loop = 1; loop <= dest_num; loop++) {
if (strchr(tracker, '\n') != NULL) {
if (strlen(tracker) != strlen(strchr(tracker, '\n'))) {
dest[loop - 1] = new char[strlen(tracker) - strlen(strchr(tracker, '\n'))];
strncpy(dest[loop - 1], tracker, strlen(tracker) - strlen(strchr(tracker, '\n')));
tracker = strchr(tracker, '\n') + 1;
} else {
tracker++;
loop--;
continue;
}
} else {
printf ("%i", strlen(tracker));
}
}
for (loop = 0; loop < dest_num; loop++)
printf ("dest[%i]: %s\n", loop, dest[loop]);
return 0;
}