From 59046be677cd4526bb568330e385da07d718b485 Mon Sep 17 00:00:00 2001 From: Jingang Liang Date: Thu, 6 Jun 2019 17:20:14 +0000 Subject: [PATCH] fix reading 2D string vector from attribute in hdf5 --- include/openmc/hdf5_interface.h | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/include/openmc/hdf5_interface.h b/include/openmc/hdf5_interface.h index c87abd84a1..d0474c8344 100644 --- a/include/openmc/hdf5_interface.h +++ b/include/openmc/hdf5_interface.h @@ -204,23 +204,19 @@ read_attribute(hid_t obj_id, const char* name, std::vector& vec) // Allocate a C char array to get strings auto n = attribute_typesize(obj_id, name); - char** buffer = new char*[m]; - for (int i = 0; i < m; i++) { - buffer[i] = new char[n]; - } + char* buffer = new char[m*n]; // Read char data in attribute - read_attr_string(obj_id, name, n, buffer[0]); + read_attr_string(obj_id, name, n, buffer); for (int i = 0; i < m; ++i) { // Determine proper length of string -- strlen doesn't work because // buffer[i] might not have any null characters std::size_t k = 0; - for (; k < n; ++k) if (buffer[i][k] == '\0') break; + for (; k < n; ++k) if (buffer[i*n + k] == '\0') break; // Create string based on (char*, size_t) constructor - vec.emplace_back(&buffer[i][0], k); - delete[] buffer[i]; + vec.emplace_back(&buffer[i*n], k); } delete[] buffer; }