C语言程序指针 debug assertion failed

C语言程序指针 debug assertion failed,第1张

函数名不一致。

主函数调用的是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在工作路径下

设么是工作路径,估计犯这个错误的你目前也不会明白


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11664106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存