Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

string array damaged at unknown moment

17 views
Skip to first unread message

Jivanmukta

unread,
Jul 28, 2022, 2:46:25 AM7/28/22
to
I have an object of class source_file:

class source_file {
private:
std::wstring source_file_path;
int current_source_line_no;
bool inside_php, start_inside_php;
int num_source_lines, too_long_line_number;
std::vector<std::string> source_lines;
std::vector<std::pair<int, std::string>> tokenized_lines;
std::vector<std::pair<int, std::string>>::const_iterator
current_tokenized_lines_iter;
size_t max_line_len, too_long_line_len, max_found_line_len;
public:
source_file(size_t max_line_length = 0) { // 0 means 'no limit'
max_line_len = max_line_length;
too_long_line_len = 0;
max_found_line_len = 0;
current_source_line_no = -1;
num_source_lines = 0;
current_tokenized_lines_iter = tokenized_lines.end();
too_long_line_number = 0;
inside_php = start_inside_php = false;
}
size_t get_max_found_line_length() const {
return max_found_line_len;
}
size_t get_too_long_line_length() const {
return too_long_line_len;
}
int get_too_long_line_number() const {
return too_long_line_number;
}
bool open(std::wstring in_file_path);
void close() {
source_lines.clear();
tokenized_lines.clear();
too_long_line_len = 0;
max_found_line_len = 0;
num_source_lines = 0;
current_source_line_no = -1;
}
void rewind() { // go to begin of file
current_source_line_no = -1;
current_tokenized_lines_iter = tokenized_lines.begin();
inside_php = start_inside_php = false;
}
bool get_next_line(std::string &line);
bool change_current_line(std::string line, bool ltrim_line);
void ltrim_current_line();
void get_contents(std::vector<std::string> &contents);
bool change_file_with_contents(const std::vector<std::string>
&contents, unsigned int defines_line_num = 0, unsigned int
defines_num_lines = 0);
void remove_magic_str(); // obejście dla problemu pozostających
magic_str
void write(std::wstring out_file_path) const {
std::ofstream out_file(shortwstr2str(out_file_path));
for (std::string line : source_lines) {
out_file << line << std::endl;
}
}
void tokenize_file(std::string token_name_delim_str);
bool get_next_line_with_tokenized(std::string &line, std::string
&tokenized_line);
};

Although the file is loaded correctly by method open(), I have a problem
of spoilt string in source_lines[813], I mean get_next_line() returns
spoilt line. I don't know the moment of time source_lines[813] is
damaged - I use VSCodium but conditional breakpoints don't work.
Please help: how to get the point in code at which source_lines[813] is
damaged.

Frederick Virchanza Gotham

unread,
Jul 28, 2022, 4:44:51 AM7/28/22
to
On Thursday, July 28, 2022 at 7:46:25 AM UTC+1, Jivanmukta wrote:
> Although the file is loaded correctly by method open(), I have a problem
> of spoilt string in source_lines[813], I mean get_next_line() returns
> spoilt line. I don't know the moment of time source_lines[813] is
> damaged - I use VSCodium but conditional breakpoints don't work.
> Please help: how to get the point in code at which source_lines[813] is
> damaged.

If your compiler is either 'g++' or 'clang++', then compile
with the following command line options:
-fsanitize=address -D_GLIBCXX_DEBUG

Run your program and you will get debugging info on screen
when there's an invalid access.


0 new messages