将 NSString 设置为等于另一个时的 Objc EXC_BAD_ACCESS
Posted
技术标签:
【中文标题】将 NSString 设置为等于另一个时的 Objc EXC_BAD_ACCESS【英文标题】:Objc EXC_BAD_ACCESS when setting a NSString equal to another 【发布时间】:2016-12-23 00:36:10 【问题描述】:我在使用 NSString 时遇到了一些非常奇怪的问题。当我从输入流中读取数据并将数据转换为字符串时,我无法设置与该字符串相等的任何内容。代码如下:
NSString *name = r.URL.lastPathComponent;
NSString *data;
NSInputStream *stream = r.HTTPBodyStream;
uint8_t byteBuffer[1];
[stream open];
if (stream)
// Get the request body from the stream. Used for setting the file name
if (stream.hasBytesAvailable)
NSInteger bytesRead = [stream read:byteBuffer maxLength:4096];
NSString *temp = [[NSString alloc] initWithBytes:byteBuffer length:bytesRead encoding:NSUTF8StringEncoding];
data = temp; // EXC_BAD_ACCESS thrown here
我需要将字符串复制到另一个字符串,但我不能。有谁知道为什么会这样?
【问题讨论】:
【参考方案1】:您的字节缓冲区是一个字节大,但您正在向其中读取 4096 个字节。这可能会触发一系列事件,最终导致崩溃。
【讨论】:
你说得对,这种行为太奇怪了。我就像“发生了什么事”。但是,是的,我正在覆盖内存中的随机部分。更改缓冲区大小可以解决所有问题。 @Minimi,你可能想养成使用 sizeof(byteBuffer) 而不是固定数字的习惯。 对不起,我没能标记它,因为它还没有 8 分钟然后我忘记了,不过今天开始了! 另外,我使用 sizeof(byteBuffer) 来避免硬编码错误的数字。以上是关于将 NSString 设置为等于另一个时的 Objc EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章
在 Javascript 中使用赋值运算符将一个对象设置为等于另一个对象