c - 如何修复它? CRT 检测到应用程序在堆缓冲区结束后写入内存

标签 c pointers

我制作了一个指向字符串的指针数组,并且发生了这个问题

我的代码有什么问题

char x[50];
int num = 0;
int i = 0;
char* arrs;
printf("Enter number");
scanf("%d", &num);
arrs = (char*)malloc(sizeof(char) * num);
getchar();
for (i = 0; i < num; i++)
{
    printf("Enter str number %d\n" , i);
    fgets(x, 50, stdin);
    *(arrs+i) = (char)malloc(sizeof(char) * strlen(x));
    strcpy((arrs+ i), x);
}

最佳答案

问题是您正在为字符数组而不是字符串数组分配内存,这是字符指针。只需将 sizeof(char) 更改为 sizeof(char *)

关于c - 如何修复它? CRT 检测到应用程序在堆缓冲区结束后写入内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36597107/

相关文章:

c++ - 在循环内使用 cin 进行循环,从而将不同的 char* 存储在一个数组中 (c++)

无符号整数递增会导致未定义的行为吗?

c - 链表 C/Struct

c - 标签库错误/警告

c - function_name(int * pn)和function_name(int * pn)有什么区别?

c++ - 多指针 X (MPX) 支持

C: 'const' 限定符在带有 typedef 用法的参数列表中的含义

c - UNIX 风格的套接字编程技巧

c - cString(使用 : . utf8)和 withUnsafeFileSystemRepresentation(_ :) differ from each other?

c - 动态内存和指针参数