将 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的主要内容,如果未能解决你的问题,请参考以下文章

在obj-c中将NSData加密为NSString?

在 Javascript 中使用赋值运算符将一个对象设置为等于另一个对象

如何将 DEFINE 变量设置为等于 PL/SQL 中另一个已定义表的选择

将函数输入的默认值设置为等于 Python 中的另一个输入

通过从另一个方法引用设置 NSString

如何将DEFINE变量设置为等于PL / SQL中另一个已定义表的选择