0
TDD를 수행 할 때 몇 가지 문제가 발생했습니다. 전역 변수를 두 번 할당 할 수 없습니다.
typedef struct {
char *rawString;
int startIndex;
int length;
} String;
나는이 getWordAndUpdate 전화
가 잘 작동 처음 작동,하지만 난 두 번 호출 할 때 나쁜 메모리 액세스를 말한다 : 내 문자열 구조체로String *subString;
String *getWordAndUpdate(String *line, char *delimiter) {
String *word = malloc(sizeof(String));
int i;
stringLeftTrim(line);
word->length = 0;
word->startIndex = 0;
for(i = line->startIndex; i < line->length; i++) {
if(line->rawString[i] != ' ') {
word->rawString[i] = line->rawString[i];
line->startIndex++;
word->length++;
} else {
break;
}
}
line->length = line->length - i;
return word;
}
: 나는이 기능을 설계했습니다.
extern String *subString;
void test_getWordAndUpdate_should_get_the_first_word_from_a_line_of_instruction() {
String oneLineString = {"movwf 0x10", 0, 10};
subString = getWordAndUpdate(&oneLineString, " ,;"); // works fine
TEST_ASSERT_EQUAL('m', subString->rawString[0]);
TEST_ASSERT_EQUAL('o', subString->rawString[1]);
TEST_ASSERT_EQUAL('v', subString->rawString[2]);
TEST_ASSERT_EQUAL('w', subString->rawString[3]);
TEST_ASSERT_EQUAL('f', subString->rawString[4]);
TEST_ASSERT_NOT_EQUAL(' ', subString->rawString[5]);
TEST_ASSERT_NOT_EQUAL('0', subString->rawString[6]);
TEST_ASSERT_NOT_EQUAL('x', subString->rawString[7]);
TEST_ASSERT_NOT_EQUAL('1', subString->rawString[8]);
TEST_ASSERT_NOT_EQUAL('0', subString->rawString[9]);
TEST_ASSERT_EQUAL(5, oneLineString.startIndex);
TEST_ASSERT_EQUAL(5, oneLineString.length);
TEST_ASSERT_EQUAL(0, subString->startIndex);
TEST_ASSERT_EQUAL(5, subString->length);
subString = getWordAndUpdate(&oneLineString, " ,;"); // bad memory access
}
필자는 코드를 먼저 살펴보고 몇 가지 주요 문제점으로 보이는 것을 수정해야한다고 생각합니다. 1. 함수'getWordAndUpdate'는'delimiter' 인수를 사용하지 않습니다 ... 2.이 함수에 대한 두 번째 호출 결과는 메모리 누수와 함께 ... 3. 당신은'rawString' 배열을 어디에도 할당하지 않는 것처럼 보입니다 ... 그리고 아마도 몇 가지 문제가 더있을 것입니다 ... –