【问题标题】:Objc EXC_BAD_ACCESS when setting a NSString equal to another将 NSString 设置为等于另一个时的 Objc EXC_BAD_ACCESS
【发布时间】: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
    }
}

我需要将字符串复制到另一个字符串,但我不能。有谁知道为什么会这样?

【问题讨论】:

    标签: ios objective-c nsstring


    【解决方案1】:

    您的字节缓冲区是一个字节大,但您正在向其中读取 4096 个字节。这可能会触发一系列事件,最终导致崩溃。

    【讨论】:

    • 你说得对,这种行为太奇怪了。我就像“发生了什么事”。但是,是的,我正在覆盖内存中的随机部分。更改缓冲区大小可以解决所有问题。
    • @Minimi,你可能想养成使用 sizeof(byteBuffer) 而不是固定数字的习惯。
    • 对不起,我没能标记它,因为它还没有 8 分钟然后我忘记了,不过今天开始了!
    • 另外,我使用 sizeof(byteBuffer) 来避免硬编码错误的数字。
    猜你喜欢
    • 2021-05-23
    • 2014-08-26
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2011-03-17
    • 2014-05-08
    相关资源
    最近更新 更多