尝试更改变量值时出现总线错误

时间:2019-02-16 02:37:09

标签: c

我创建了一个变量并分配了一些值。 当我调用一个函数并尝试更改变量的值时,我收到了总线错误。

如果我使用malloc,则可以。

我的问题是:

为什么没有malloc不能正常工作?

因为我认为从理论上讲,当您创建一个变量时,您会自动拥有一个内存地址(printf(“%p”)证明),并且您可以访问该变量值,因此已经分配并使用了内存。

那为什么没有总线错误就不能更改?

那是我的代码

void    strclr(char *s)
{
   printf("%s \n", s);
    while(*s)
    {
        *s = '\0';
        s++;
    }
    printf("%s ok", s);
}

int main()
{

    char *str = strdup("testing"); //allocate with malloc
    char *str2 = "testing";

    strclr(str); //works
    strclr(str2); //don't work, bus error;
}

1 个答案:

答案 0 :(得分:1)

str2指向字符串文字。这些是只读的,实际上通常放置在内存的只读部分中。这就是为什么在尝试修改时会出现总线错误。

如果您将str2定义为数组,则可以对其进行修改。

char str2[] = "testing";

在这里,我们有一个已初始化且带有字符串文字的数组。它本身不是字符串文字。