C语言执行memcpy后free。程序终止

C语言执行memcpy后free。程序终止,第1张

函数a里的for循环的循凳谨环条件不能是i<=12,应该是i<12,否则i=12的时候,就是非法访问了。

char* a()

int main(int argc, _TCHAR* argv[])

{

    char *buf_s=a()

    free(buf_s)

    return 0

}

char* a()

{

   高码 char *buf=(char*)malloc(12)

    for(int i=0 i<12 i+=2)    /*i=12的时候,非法访问*/

    枣念基    memcpy(buf+i,"aa",sizeof(char[2]))

    return buf

}

void *memcpy(void *dest, const void *src, size_t n)

就是把以src指向地址为起始地址连续n个字节的数据复制到dest指向地址为起始地址连续n个字节的空间内。

如果连续调用memcpy但dest参数指向的地址不变的话,那当然就是覆盖数据了。

如果好追加数据,那么每次执行memcpy后要把dest的地址增加到你要追加数据的地址。

你的代码可以改为(请自己保证给data分配足够的存储空间):

int m=0

while (1)

{

byte *t= new byte[0x1000]//循环一次接收的数据

int n = sockClient.Receive(t, 0x1000)

if (n == 0)

{

break//接收完毕退出

}

memcpy(data+m*0x1000, t, n)//把收到的数据写入data

m++

}

【问题描述】:电脑重启后,设备和打印机中的打印机消失,并且无法使用打印机,但每次重新安装驱动后又可以使用。(如图1)图1【原因分析】:Print Spooler—文件打印服烂返务启动类型设置为手动导致【简易步骤】:【我的电脑】—右键—【管理】—【服务和应用程序】—【服务】—【print spooler服务】—服务状态【停止】—启动类型【向下三角】—【自动】—【启动】—【确定】【解决方案】:1. 点击我的电脑右键管理。(如图2)图22. 点击【服务和应用程序卖晌】,双击【服务】。(如图3)图33. 找到【print spooler服务】,服务状态饥配饥,点击【停止】。(如图4)图44. 启动类型中点击【向下三角】,选择【自动】,点击【启动】,点击【确定】。(如图5)图5注意事项:当此服务设置为禁用状态,打印机同样无法使用,并且无法安装打印机。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存