【发布时间】:2021-10-31 02:05:47
【问题描述】:
我在函数的第 5 行遇到访问冲突错误:
newString->str = cpysource;
我正在尝试将 char * 复制到字符串的值。
typedef struct {
char* str;
}String;
这是我的struct。
String* CreateString(const char* source)
{
int len1 = strlen(source);
char* cpysource = (char*)malloc(len1 * sizeof(char));
cpysource = source;
String* newString = malloc(sizeof(String));
newString->str = cpysource;
return newString;
}
【问题讨论】:
-
您正在分配
cpysource,然后通过在其顶部分配source而不是执行strcpy来立即泄漏它。此外,您不需要在 C 中的malloc之后进行转换 -
cpysource = source;除了指针之外不复制任何内容。cpysource现在指向与source相同的内存位置。您可以只使用cpysource = strdup(source);(并跳过手动分配空间) -
还有
malloc(len1 * sizeof(char))-->malloc(len1 * sizeof(char) + 1)为NUL终结者留出空间。 -
@StefanRiedel 注意:
strdupisn't officially part of C until C23 但它是 POSIX。那就是说 AFAIK 它普遍可用 -
您遇到了什么错误?编辑您的问题并将其复制并粘贴到那里。