小编Ted*_*urt的帖子

扩展CLPlacemark时EXC_BAD_ACCESS-在定义范围之外访问变量

我有一个问题,我已经找到解决方法,但是我想了解为什么它不起作用-因为这对我来说毫无意义。这是一个演示我的问题的最小示例:

import XCTest
import CoreLocation

class ExampleTests: XCTestCase {

    var okay: ext!

    // this test works fine
    func testOkay(){
        okay = ext()
        XCTAssertNotNil(okay)
    }

    // this test crashes with EXC_BAD_ACCESS(code=1, address=0x10)
    func testNotOkay(){
        let notOkay: ext
        notOkay = ext()
        XCTAssertNotNil(notOkay)
    }
}

extension ExampleTests {
    class ext : CLPlacemark{

    }
}
Run Code Online (Sandbox Code Playgroud)

我正在看一本书,以开发一个简单的TodoList应用程序,该应用程序使用CoreLocation对地址进行地理编码。作为测试的一部分,我必须创建一个模拟CLPlacemark对象以测试地理编码功能。

在这本书中,我被告知我必须为此模拟程序声明一个变量作为Test类的属性,因为否则“由于在其定义范围之外访问了地标,因此测试会崩溃”。

可以在上面的示例中看到。testOkay()正常工作,因为它okay被声明为类属性。由于出现错误而testNotOkay()崩溃EXC_BAD_ACCESS,因为我尝试实例化ext该函数中的新实例。

现在,如果我不扩展CLPlacemark,问题就解决了-即我可以ext在函数中声明类型类型的变量,或者在类的属性中声明类型,而没有问题。

这里发生了什么?我看不出为什么第二个示例在第一个示例工作时会崩溃。在我的实际代码中,仅在一个或两个函数中使用我的模拟地标实例作为类属性时,将它们声明为类属性似乎很轻而易举。肯定有一些我不了解Swift的问题导致了这个问题。

谢谢!!

unit-testing memory-management ios swift

2
推荐指数
1
解决办法
328
查看次数

C++代码中的神秘分割错误

我编写C++已经有一段时间了,我对这个代码示例有一些问题:

#include <iostream>
#include <string>
#include <sstream>
#include <vector>

using namespace std;

string* data;
int current = 0;

void init(){
    data = new string[6];
    data[0] = "7 4 3";
    data[1] = "8 11 12 16 17 18 20";
    data[2] = "17 16 20 2 20 5 13";
    data[3] = "17 8 8 16 12 15 13";
    data[4] = "12 4 16 4 15 7 6";
    data[5] = "8 14 2 11 17 12 8";
}

string getNext() {
    if(current == …
Run Code Online (Sandbox Code Playgroud)

c++ memory

-1
推荐指数
1
解决办法
118
查看次数

标签 统计

c++ ×1

ios ×1

memory ×1

memory-management ×1

swift ×1

unit-testing ×1