C动态分配的数组使用memset进行初始化

C dynamic allocated array using memset for initialisation

所以我制作了一个关于动态分配的 char 数组的程序,该程序尚未完成,但在我 运行 程序之后我得到了一些不同的 return 值,没有警告,编译器中没有错误,所以我不知道为什么我有时也会遇到这个程序崩溃..

#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main(){
int n,i;
char *tab=NULL;
printf("New size of array: ");
scanf("%d",&n);
tab=(char*)malloc(n*sizeof(char));
memset(tab,'X',n*sizeof(tab));
for(i=0;i<n;i++)
    printf("%c",tab[i]);
free(tab);
return 0;
}

C库函数void *memset(void *str, int c, size_t n) 将字符c(无符号字符)复制到参数指向的字符串的前n个字符海峡

memset(tab,'X',n*sizeof(char));

您已经编写了 n*sizeof(tab),您正在将字符 X 复制到未知内存,这可能会导致运行时崩溃。

在你的 memset 中你写了 n * sizeof(tab),我想你想写: n * sizeof(字符)

您还可以在 malloc 末尾添加 +1 并检查 return 值,只是为了安全起见。

查看这一行:

memset(tab,'X',n*sizeof(tab));

您将tab声明为指针,指针的存储大小超过1个字节。将它乘以你想要的数组大小 n 将导致你将数据复制到内存 space 你不允许访问这就是你得到分段错误的原因。

如果你必须使用 sizeof,那么这样做:

memset(tab,'X',n*sizeof(char));

或者更好的是,只需这样做:

memset(tab,'X',n);

因为一个 char 是一个字节,n 次 1 = n。