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

bke*_*ley 0 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);

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

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

    free(buffPtr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

int*_*jay 6

memset将覆盖它指向的内存的指针来代替.它应该是:

memset(buffPtr, 0, 128);
Run Code Online (Sandbox Code Playgroud)

我删除了&符并设置了正确的大小(sizeof(buffPtr)是指针的大小,而不是分配的大小).

您还应该将断言更改为buffPtr != NULL不带符号的检查(&buffPtr永远不会为空).并且assert在这里使用并不正确,因为它在发布版本中可能无效.