Xcode Exc_BAD_ACCESS

时间:2016-03-10 11:27:48

标签: c xcode pointers

所以这段代码给了我Exc_bad_access_code(2)错误,我不明白为什么。我认为问题在于参数,但我不确定,有什么想法吗?

#include <stdio.h>

void swap(char *x, char *y);


/* Function to swap values at two pointers */
void swap(char *x, char *y)
{
    char temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

int main(int argc, const char * argv[]) {
    // insert code here...

    char *a = "ASD123";
    swap (a+1 , a+2);

    return 0;
}

3 个答案:

答案 0 :(得分:1)

您需要发布完整的崩溃日志以确定,但可能是您尝试操作字符串常量:

char *a = "ASD123";
swap (a+1 , a+2);

可能存在于只读内存中。

尝试:

char a[12];
strcpy(a, "ASD123");
swap (a+1 , a+2);

或:

char a[] = "ASD123";
swap (a+1 , a+2);

这会将字符串复制到堆栈中,可以在没有问题的情况下对其进行修改。您还可以使用strdup()将字符串复制到堆上(不要忘记调用free()来释放已分配的内存)。

答案 1 :(得分:0)

您需要正确初始化a。像char a[7] = "ASD123";

这样的东西

char* a仅创建pointer-to-char,它没有分配足够的内存来存储字符。

答案 2 :(得分:0)

您正在尝试修改字符串文字。

更改

char *a = "ASD123";

char a[] = "ASD123";

,您的计划将有效。

在第一种情况下,a只是一个指向字符串文字的指针,该字符串文字位于大多数平台上的内存写保护部分,因此崩溃是因为您尝试写信息写保护内存。

在第二种情况下,a是长度为7的字符数组,用&#34; ASD123&#34;初始化。 (字符串为6个字符,终止零字符为1个字符)。