为什么这个c代码在strcpy中出现分段错误?

为什么这个c代码在strcpy中出现分段错误?,c,C,为什么strcpy()的代码会给我一个分段错误?我正在使用GNU,当代码到达strcpy时,由于分段错误而失败 #include<stdio.h> #include<string.h> #include<assert.h> void PrintString(char *buff); int main() { char *buffPtr = malloc(128); assert(&buffPtr != NULL); mem

为什么strcpy()的代码会给我一个分段错误?我正在使用GNU,当代码到达strcpy时,由于分段错误而失败

#include<stdio.h>
#include<string.h>
#include<assert.h>

void PrintString(char *buff);
int main()
{
    char *buffPtr = malloc(128);

    assert(&buffPtr != NULL);

    memset(&buffPtr, 0, sizeof(buffPtr));

    strcpy(buffPtr,  "This is my string");

    free(buffPtr);
    return 0;
}
#包括
#包括
#包括
无效打印字符串(字符*浅黄色);
int main()
{
char*buffPtr=malloc(128);
断言(&bufftr!=NULL);
memset(&buffPtr,0,sizeof(buffPtr));
strcpy(buffPtr,“这是我的字符串”);
免费(bufftr);
返回0;
}

内存集将覆盖指针,而不是它指向的内存。应该是:

memset(buffPtr, 0, 128);
我删除了符号并设置了正确的大小(
sizeof(buffPtr)
是指针的大小,而不是分配的大小)


您还应该将assert更改为check
buffPtr!=空
不带符号(
&buffPtr
将永远不会为空)。在这里使用
assert
并不正确,因为它在发布版本中可能不会起任何作用。

内存集将覆盖指针,而不是它指向的内存。应该是:

memset(buffPtr, 0, 128);
我删除了符号并设置了正确的大小(
sizeof(buffPtr)
是指针的大小,而不是分配的大小)


您还应该将assert更改为check
buffPtr!=空
不带符号(
&buffPtr
将永远不会为空)。在这里使用
assert
并不正确,因为它在发布版本中可能不会起任何作用。

assert(&buffPtr!=NULL);memset(&buffPtr,0,sizeof(buffPtr))应该是
assert(buffPtr!=NULL);memset(bufftr,0,128)。还需要
#包括
,因为您用该
内存集
销毁了指针值。你用零敲打它。之后,对无效内存位置执行strcpy操作触发了segfault。此
sizeof(buffPtr)
不会返回您认为断言的值(&buffPtr!=NULL);memset(&buffPtr,0,sizeof(buffPtr))应该是
assert(buffPtr!=NULL);memset(bufftr,0,128)。还需要
#包括
,因为您用该
内存集
销毁了指针值。你用零敲打它。之后,对无效内存位置执行strcpy操作会触发segfault。此
sizeof(buffPtr)
不会返回您认为的值