1 memory exc-bad-access objective-c
我收到一个EXC_BAD_ACCESS错误,这是因为这部分代码.基本上,我接受一个输入并做一些工作.多次输入后,它会抛出错误.我在这里做错了吗?我会发布剩下的代码,但它相当长 - 而且我认为这可能是我的问题所在(至少Xcode指向我的地方).
-(IBAction) findShows: (id) clicked
{
char urlChars[1000];
[self getEventURL: urlChars];
NSString * theUrl = [[NSString alloc] initWithFormat:@"%s", urlChars];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:theUrl]];
int theLength = [data length];
NSString *content = [NSString stringWithUTF8String:[data bytes]];
char eventData[[data length]];
strcpy(eventData, [content UTF8String]);
[self parseEventData: eventData dataLength: theLength];
[whatIsShowing setStringValue:@"Showing events by this artist"];
}
Run Code Online (Sandbox Code Playgroud)
bbu*_*bum 11
发表它.
您的程序将在调试器中中断,并且调用堆栈将位于调试器UI中(或者您可以键入'bt
因此,崩溃的原因通常非常明显.如果没有这个,我们就会批评代码.
所以,这里......
char urlChars[1000];
[self getEventURL: urlChars];
Run Code Online (Sandbox Code Playgroud)
这充其量只是一个安全漏洞,最糟糕的是,它是崩溃的根源.每当你要将字节复制到缓冲区时,应该有某种方式来(a)限制复制的字节数(传递缓冲区的长度)和(b)返回的复制字节数( 0表示失败或没有复制字节).
鉴于上述情况,如果有1042个字节复制到发生urlChars的getEventURL:? 繁荣
NSString * theUrl = [[NSString alloc] initWithFormat:@"%s", urlChars];
Run Code Online (Sandbox Code Playgroud)
这是对此的一些假设urlChars会导致失败.首先,它假定urlChars具有适当的%s兼容编码.其次,它假定urlChars为NULL终止(并且没有溢出缓冲区).
最好使用各种NSString方法之一,使用特定编码直接从字节缓冲区创建字符串.更精确,更高效.
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:theUrl]];
Run Code Online (Sandbox Code Playgroud)
我希望这不是主线程...因为它会阻止它是否会阻止你的应用程序在缓慢/片状网络上无响应.
int theLength = [data length];
NSString *content = [NSString stringWithUTF8String:[data bytes]];
char eventData[[data length]];
strcpy(eventData, [content UTF8String]);
Run Code Online (Sandbox Code Playgroud)
这是关于这样做效率最低的方法.没有必要创建一个NSString实例,然后将其转换为(char *).只需bytes直接从数据中获取.
另外 - 你确定返回的数据是NULL终止的吗?如果没有,那就strcpy()要吹过eventData缓冲区的末端,破坏堆栈.
[self parseEventData: eventData dataLength: theLength];
[whatIsShowing setStringValue:@"Showing events by this artist"];
Run Code Online (Sandbox Code Playgroud)
你解析的是什么类型的数据,你真的要解析原始字节?几乎在所有情况下,这些数据都应该是某种结构化类型; XML,甚至是HTML.如果是这样,则无需下拉解析原始字节.(并不是原始数据闻所未闻 - 只是奇怪的).
| 归档时间: |
|
| 查看次数: |
329 次 |
| 最近记录: |