- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 C 语言为 iPhone 实现一个 floodfill
函数。
填充有效,尽管我遇到了 2 个问题。
执行几次以下代码后,手机会发出内存警告。最有可能是内存泄漏。另请注意,unsigned char *data (图像数据)在洪水填充结束时被释放。
(较小的问题)如果我尝试将 RGB 颜色写入大于大约 (r:200,g:200,b:200,a:200 ) 我遇到了奇怪的现象。解决此问题的方法是简单地限制值。
我怀疑这两个问题之间可能存在关联。
下面的代码使用堆栈描述了我的洪水填充算法:
.h:
typedef struct {
int red;
int green;
int blue;
int alpha;
} GUIColor;
struct pixel_st {
int x;
int y;
struct pixel_st *nextPixel;
};
typedef struct pixel_st pixel;
.m:
void floodFill(CGPoint location, GUIColor tc, GUIColor rc, size_t width, size_t height, unsigned char *data){
if (isGUIColorEqual(tc, rc)) return;
pixel* aPixel = (pixel *) malloc(sizeof (struct pixel_st));
NSLog(@"sizeof aPixel : %i",(int)sizeof(aPixel));
(*aPixel).x = location.x;
(*aPixel).y = location.y;
(*aPixel).nextPixel = NULL;
int i = 0;
NSLog(@"Replacement color A%i, R%i, G%i, B%i",rc.alpha,rc.red,rc.green, rc.blue);
while (aPixel != NULL){
pixel *oldPixel_p = aPixel;
pixel currentPixel = *aPixel;
aPixel = currentPixel.nextPixel;
//Now we do some boundary checks
if (!isOutOfBounds(currentPixel.x, currentPixel.y, width, height)){
//Grab the current Pixel color
GUIColor currentColor = getGUIColorFromPixelAtLocation(CGPointMake(currentPixel.x, currentPixel.y), width, height, data);
if (isGUIColorSimilar(currentColor, tc)){
//Colors are similar, lets continue the spread
setGUIColorToPixelAtLocation(CGPointMake(currentPixel.x, currentPixel.y), rc, width,height, data);
pixel *newPixel;
if ((newPixel = (pixel*) malloc(sizeof(struct pixel_st))) != NULL) {
(*newPixel).x = currentPixel.x;
(*newPixel).y = currentPixel.y-1;
(*newPixel).nextPixel = aPixel;
aPixel = newPixel;
}
if ((newPixel = (pixel*) malloc(sizeof(struct pixel_st))) != NULL) {
(*newPixel).x = currentPixel.x;
(*newPixel).y = currentPixel.y+1;
(*newPixel).nextPixel = aPixel;
aPixel = newPixel;
}
if ((newPixel = (pixel*) malloc(sizeof(struct pixel_st))) != NULL) {
(*newPixel).x = currentPixel.x+1;
(*newPixel).y = currentPixel.y;
(*newPixel).nextPixel = aPixel;
aPixel = newPixel;
}
if ((newPixel = (pixel*) malloc(sizeof(struct pixel_st))) != NULL) {
(*newPixel).x = currentPixel.x-1;
(*newPixel).y = currentPixel.y;
(*newPixel).nextPixel = aPixel;
aPixel = newPixel;
}
free(oldPixel_p);
i ++;
if (i == width * height * 4 * 5) break;
}
}
}
free(aPixel);
}
此堆栈的实现基于此处找到的 ObjFloodFill
:
https://github.com/OgreSwamp/ObjFloodFill/blob/master/src/FloodFill.m
最佳答案
首先,循环内的每个 if ((newPixel = (pixel*) malloc(...
) 都会分配新的内存块,因此,您有 4 次分配在循环内并且仅1释放。
其次,我不明白为什么不简单地使用堆栈上的对象?您真的需要在堆上分配newPixel、oldPixel等吗?检查实现,可能有更简单的方法来实现相同的功能,而且根本不需要管理内存问题。
关于objective-c - iPhone 泛洪内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15268098/
我是 websocket 的新手,我在 web 应用程序上实现了 websocket,服务器端是用 java 编写的,客户端是 javascript。服务器通过 websocket 向客户端发送通知。
我的网站有一个 Javascript 方法,可以发出 AJAX 请求将商品添加到购物车,而无需重新加载页面和发出简单的通知。 AddToCart() 但是,使用任何 Javascript 控制台,我
我正在尝试在两台 ubuntu 机器之间进行 TCP SYN 泛洪(我正在使用 virtualbox,并且我确实在机器之间进行了 ping)。 我得到的错误是 ERROR setting IP_HDR
我希望我的 Apache 2 网络服务器因 TCP Syn Flood 攻击而拒绝服务。 我将 Kali Linux 与 MSF 结合使用来关闭我的 Web 服务器。但我的网络服务器似乎并不关心这个。
我是一名优秀的程序员,十分优秀!