- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
C++。它可能更多的是在 Visual Studio 中调试和使用内存的问题。
我有一个分析文件列表的程序,当前文件的路径是字符串的串联:名为“文件夹”的 CString 对象和文件名本身(也是 CString)。
但是在第 144 次迭代之后(我确定这个数字不重要),文件夹突然变成了 BadPtr 并且应用程序因访问冲突而崩溃。为了检查,我创建了一个具有相同目录的 CFileFind 对象,而不是与文件夹连接,而是与 finder.GetRoot() 连接。同样的故事,第 144 次迭代和崩溃。
问题是,我如何保护这个变量的内存(在第 144 次迭代之前没问题)或跟踪实际写入该位置的函数或其他任何东西来调试这个问题。在循环过程中,文件夹变量根本没有改变。实际上它在某个类的私有(private)部分中,出现在循环中的所有函数都无法访问这个私有(private)部分。
代码是这样的(可能会有一些错别字因为我删掉了一些不重要的东西):
typedef map<CString, list< CRect > > metadata;
...
metadata::iterator it=mt.begin();
list< CRect >::iterator it_l;
float i=0;
while(it!=mt.end()){
if(cur.Load(folder+"\\"+(*it).first+".jpg")){
it_l=(*it).second.begin();
i+=1.0;
while(it_l!=(*it).second.end()){
cur.buildVector(*it_l);
cur.printVector(mf,',');
mf<<",1"<<"\n";
it_l++;
}
}
it++;
}
buildVector 收集当前图像的 CRect 对象中的特征,cur.Load 加载图像 itsef,printVector 打印 vector 到名为 mf 的 ofstream。我计算迭代次数。
更新:我检查了我的代码,对除 cur.Load(...) 之外的所有行进行了注释,但仍然发生崩溃,但发生在第 584 次迭代时。看起来像是它的覆盖内存问题。我查看了 Load 中的所有函数:
bool Image::Load(CString& path){
if(!src.IsNull()){
src.Destroy();
}
src.Load(path);
width=src.GetWidth();
height=src.GetHeight();
fillBrightnessMatrix();
fillGradientMatrices();
return true;
}
并发现注释 fillBrightnessMatrix() 可以使迭代通过列表的末尾而不会出现任何错误。这个函数是唯一一个与内存一起工作的函数,这里是它的代码:
void Image::fillBrightnessMatrix(){
const int nPitch = src.GetPitch();
const unsigned int nWidth = src.GetWidth();
const unsigned int nHeight = src.GetHeight();
BYTE * pxPixel = reinterpret_cast<BYTE*>(src.GetBits());
for(int nY = 0; nY < nHeight; ++nY)
{
for(int nX = 0; nX < nWidth; ++nX)
{
pxPixel += 3;
bright[nX][nY]=((*pxPixel+*(pxPixel+1)+*(pxPixel+2))/3.0)/255.0;
};
if(nPitch >= 0)
pxPixel += nPitch - (nWidth*3);
else
pxPixel -= ((nWidth*3) + (nPitch*(-1)));
};
}
bright 在构造函数中分配,它的 double[500][500]。实际上,我在这段代码中没有看到任何内存泄漏,我做错了什么?
现在调试器指向这一行:
bright[nX][nY]=((*pxPixel+*(pxPixel+1)+*(pxPixel+2))/3.0)/255.0;
说 pxPixel 是 BadPtr >。<该死的我什么都不懂。
最佳答案
我没有看过您的代码,但这闻起来像是有人越界写入数据。要捕捉这样的东西:
CString
,所以我没法帮你。)关于c++ - 多次迭代后的 BadPtr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4013045/
C++。它可能更多的是在 Visual Studio 中调试和使用内存的问题。 我有一个分析文件列表的程序,当前文件的路径是字符串的串联:名为“文件夹”的 CString 对象和文件名本身(也是 CS
每当我在代码中到达这一点时,我都会收到 BadPtr 错误:为什么? for(int i = 0; i #include #include #include using namespace s
我写了一个 C++ Dll,它有两个功能,一个是将二进制文件写入磁盘,另一个是从磁盘读取该文件并加载到内存中。 //extremely simplified code looks like this
我的 std::map 定义为 typedef std::map ImageDataMap; typedef std::pair ImageDataPair; typedef std::map::it
我有一个函数可以解析 .csv 文件并使用“,”作为分隔符标记每一行。我将它标记为一个 vector 。然后我遍历该 vector 并使用模板函数将每个字符串转换为数字。出于某种原因,除了一次编译配置
我是一名优秀的程序员,十分优秀!