跟着网上教程学C的时候碰到了这个问题,不知道怎么解决,
代码如下
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int i = 10;
char* p;
scanf("%d", &i);
p = (char*)malloc(i);
strcpy(p, "malloc success");
puts(p);
free(p);
p = NULL;
return 0;
}
运行后出现异常:
0x00007FF924E1D1E2 (ucrtbased.dll)处(位于 6.指针与动态内存申请.exe 中)引发的异常: 0xC0000005: 写入位置 0xFFFFFFFF9D03D6A0 时发生访问冲突。
内存分配的不对
如果这个i是指"malloc success"这一串字符的长度
就改成
p=(char *)malloc(i*sizeof(char))
你使用 scanf输入分配的内存太小了, 输入大一点的数字就行了, 这行字符串"malloc success"至少需要15字节内存.
或者这样做个安全检查
int main() {
int i = 10;
char* p;
scanf("%d", &i);
p = (char*)malloc(i);
if (i > 15) {
strcpy(p, "malloc success");
puts(p);
}
else
puts("malloc failure");
free(p);
p = NULL;
return 0;
}