函数名不一致。
主函数调用的是StrC, 声明的是Strcpy,代码而言没有大问题。
a本身不是分配的内存不能这么用,直接malloc内存就可以了。
#include <stdio.h>#include <stdlib.h>
#include <string.h>
char* l_strcat(const char *a, const char *b)
{
int lena = strlen(a), lenb = strlen(b)
int h = lena + lenb + 1
char *ret = (char *)malloc(h * sizeof(char))
if (ret == NULL) {
printf("failed to malloc")
}
size_t i = 0, j = 0
while (i < lena) {
ret[i] = a[i]
i++
}
while (j < lenb)
ret[i++] = b[j++]
ret[i] = '\0'
return ret
}
int main(int argc, char *argv[])
{
const char *a = "abcdef"
const char *b = "mn"
char *out = l_strcat(a, b)
int i = 0
printf("%s\n", out)
free(out)
return 0
}
这种错误虽然显示File:dbgheap.c ,Line:1011 ,Expression:_Crtls ValidHeapPointer(pUserData) 但实际上是自己程序里的错误引起的。(网上可以查到,不少人也得到这个错误)。
例如 有人 用了 delete []a就出现这种错误。
这种错误发生的语句地点比较难找。你可以插入一些输出语句,跟踪运行,找出出错地点,把有问题的句子用注解注掉,看1011行错误是否消失,再考虑解决办法。
ValidHeapPointer -- “合法的堆的指针”,堆--堆栈的“堆”,所以你的错误同“堆”有关。
小朋友,你的错误是fp = fopen("IN23.DAT", "r") 这个句子失败了,然后导致fscanf(fp, "%d", &a[i]) 出错。你最好写个绝对路径,比如fp = fopen("c:\\IN23.DAT", "r") ,然后吧IN23.DAT这个文件放在c盘下
否则的话你得明确你的程序在执行时的工作路径(不一定是程序所在位置)
然后确保IN23.DAT在工作路径下
设么是工作路径,估计犯这个错误的你目前也不会明白
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)