Skip to content
Snippets Groups Projects

[Fix] memory leak due to "dim" local variable overflow

Merged Maxence Naud requested to merge fix/Tensor/toString into main
1 file
+ 18
13
Compare changes
  • Side-by-side
  • Inline
@@ -477,13 +477,14 @@ class Tensor : public Data,
@@ -477,13 +477,14 @@ class Tensor : public Data,
if (dims().empty()) { return "{}"; }
if (dims().empty()) { return "{}"; }
std::string res;
std::string res;
std::size_t dim = 0;
std::size_t dim = 0;
std::size_t *dimVals = new std::size_t[nbDims()];
for (std::size_t i = 0; i < nbDims(); ++i) {
dimVals[i] = 0;
}
std::size_t counter = 0;
std::size_t counter = 0;
res += "{\n";
if (nbDims()>=2) {
if (nbDims()>=2){
std::size_t *dimVals = new std::size_t[nbDims()];
 
for (std::size_t i = 0; i < nbDims(); ++i) {
 
dimVals[i] = 0;
 
}
 
// std::vector<std::size_t> dimVals = std::vector<std::size_t>(nbDims(), 0);
 
res += "{\n";
while (counter < mSize) {
while (counter < mSize) {
std::string spaceString = std::string((dim+1)<<1,' ');
std::string spaceString = std::string((dim+1)<<1,' ');
if (dim < nbDims()-2) {
if (dim < nbDims()-2) {
@@ -532,31 +533,35 @@ class Tensor : public Data,
@@ -532,31 +533,35 @@ class Tensor : public Data,
}
}
res += "\n";
res += "\n";
}
}
 
if (dim == 0) {
 
break;
 
}
dimVals[dim--] = 0;
dimVals[dim--] = 0;
dimVals[dim]++;
dimVals[dim]++;
}
}
}
}
for(int i = static_cast<int>(dim); i>=0; --i) {
delete[] dimVals;
 
 
for(int i = static_cast<int>(dim); i > 0; --i) {
res += std::string((dim+1)<<1,' ') + "}\n";
res += std::string((dim+1)<<1,' ') + "}\n";
}
}
}else{
} else {
 
res += "{";
for (DimSize_t j = 0; j < dims()[0]; ++j) {
for (DimSize_t j = 0; j < dims()[0]; ++j) {
switch (mDataType)
switch (mDataType)
{
{
case DataType::Int32:
case DataType::Int32:
res += " " + std::to_string(static_cast<int *>(mImpl->rawPtr())[j]) + ((j < dims()[0]-1) ? "," : "\n");
res += " " + std::to_string(static_cast<int *>(mImpl->rawPtr())[j]) + ((j < dims()[0]-1) ? "," : "");
break;
break;
case DataType::Float64:
case DataType::Float64:
res += " " + std::to_string(static_cast<double *>(mImpl->rawPtr())[j]) + ((j < dims()[0]-1) ? "," : "\n");
res += " " + std::to_string(static_cast<double *>(mImpl->rawPtr())[j]) + ((j < dims()[0]-1) ? "," : "");
break;
break;
default:
default:
res += " " + std::to_string(static_cast<float *>(mImpl->rawPtr())[j]) + ((j < dims()[0]-1) ? "," : "\n");
res += " " + std::to_string(static_cast<float *>(mImpl->rawPtr())[j]) + ((j < dims()[0]-1) ? "," : "");
break;
break;
}
}
}
}
}
}
res += "}";
res += "}";
return res;
return res;
}
}
Loading