c++-stack around variable was corrupted C++

问题描述

stack around variable was corrupted C++

每次运行结束后都会出现stack around variable “temp” was corrupted,
调试后发现总是在main程序结束后出现这个错误,这是为什么??

#include<iostream>
#include<string>
#include<fstream>
#include<assert.h>
#include<Windows.h>
using namespace std;

int UnicodeToANSI(char * pDes, const wchar_t * pSrc)
{
    assert(pDes != NULL);
    assert(pSrc != NULL);
    int nLen = ::WideCharToMultiByte(CP_ACP, 0, pSrc, -1, NULL, 0, NULL, NULL);
    if (nLen == 0)
    {
        return -1;
    }
    return ::WideCharToMultiByte(CP_ACP, 0, pSrc, -1, pDes, nLen, NULL, NULL);
}
int main()
{
    const int maxbytes = 50;
    wchar_t wbuf[2];
    memset(wbuf, 0, sizeof(wchar_t)*2);
    FILE *fp = NULL;
    FILE *outf = NULL;
    fopen_s(&fp,"D:\Program Files\新东方背单词5\3K.txt","rb");  //unicode text file
    fopen_s(&outf, "D:\Program Files\新东方背单词5\test.txt", "w");  //ansi text file
    if (fp != NULL)//&&outf!=NULL)
    {
        fseek(fp, sizeof(wchar_t), 0);
        while (1)
        {
            char temp[2] = { 0 };
            fread(wbuf, sizeof(wchar_t), 1, fp);
            UnicodeToANSI(temp, wbuf);
            wchar_t widec = '!';
            if (wbuf[0] == widec)
            {
                break;
            }
            //cout << temp;
            fputs(temp, outf);
            memset(wbuf, 0, sizeof(wchar_t) * 2);
        }
    }
    memset(wbuf, 0, sizeof(wchar_t) * 2);
    fclose(fp);
    fclose(outf);
    return 0;
}

解决方案

temp数组长度太短,导致数组越界了;
int nLen = ::WideCharToMultiByte(CP_ACP, 0, pSrc, -1, NULL, 0, NULL, NULL); 返回值为3

解决方案二:

提示堆栈变量temp被损坏了,也就是说temp使用出问题了, 越界了。。。

时间: 2024-12-05 08:14:37

c++-stack around variable was corrupted C++的相关文章

for- run-time check failure #2 stack around variable

问题描述 run-time check failure #2 stack around variable 能输出正确结果可是弹出这个错误窗口是怎么回事? #include<stdio.h>#include<math.h>int main(){ int a[3]; for (a[0] = 1; a[0] < 21; a[0]++) for (a[1] = 1; a[1] < a[0]; a[1]++) for (a[2] = 1; a[2] < a[1]; a[2]

function&#039;s argument is function&#039;s local variable, build in stack memory, released when function exit. its value copyed from out variables.

C的函数, 如果它有参数. 参数是怎么传递的.有这么几点必须明白: 1. 参数传递时, 函数体内部将在内存stack区域新建作用在这个函数内部的本地变量. 如 void test1 (char * a) , 这里 a 是函数的本地变量.  2. 传递的是值, 而不是变量. 如 test1(b), 函数体里面的 a 是拷贝了b这个变量的值, 而不是b这个变量. 来做个测试就会明白 :  [root@digoal zzz]# cat a.c #include <stdio.h> #include

《ELK Stack权威指南 》第3章 场景示例

本节书摘来自华章出版社<ELK Stack权威指南 >一书中的第1章,第3节,作者饶琛琳,更多章节内容可以访问"华章计算机"公众号查看. 场 景 示 例 前面虽然介绍了几十个Logstash插件的常见配置项,但是过多的选择下,如何组合使用这些插件,依然是一部分用户的难题.本章将列举一些最常见的日志场景,演示针对性的组件搭配,希望能给读者带来启发. 本章介绍的场景包括:Nginx访问日志.Nginx错误日志.Postfix日志.Ossec日志.Windows系统日志.Java

并发编程(三): 使用C++11实现无锁stack(lock-free stack)

前几篇文章,我们讨论了如何使用mutex保护数据及使用使用condition variable在多线程中进行同步.然而,使用mutex将会导致一下问题: 等待互斥锁会消耗宝贵的时间 - 有时候是很多时间.这种延迟会损害系统的scalability.尤其是在现在可用的core越多越多的情况下. 低优先级的线程可以获得互斥锁,因此阻碍需要同一互斥锁的高优先级线程.这个问题称为优先级倒置(priority inversion ). 可能因为分配的时间片结束,持有互斥锁的线程被取消调度.这对于等待同一互

array variable used in printf function

在C中, array变量和指针极其相似. 指针加减运算, 首先需要知道指针类型, 类型占用的字节数, 如int *的指针, 加1 则表示地址加4字节(假设32位的机器int占4字节); 如果是char * 的指针, 指针变量加1则表示地址加1字节(char 占1个字节). 例子1 :  #include <stdio.h> #include <stdlib.h> int main() { char a[10] = "abcdefg"; printf("

How Clang handles the type / variable name ambiguity of C/C++

原文地址: http://eli.thegreenplace.net/2012/07/05/how-clang-handles-the-type-variable-name-ambiguity-of-cc/ How Clang handles the type / variable name ambiguity of C/C++ July 5th, 2012 at 7:35 pm My previous articles on the context sensitivity and ambigu

stack overflowyou收藏,关注等类似功能嘛?如果有在那里

问题描述 stack overflowyou收藏,关注等类似功能嘛?如果有在那里 10C 如题,stack overflowyou收藏,关注等类似功能嘛?如果有在那里?谢谢回答 解决方案 你说的也太简单了吧,谁知道你问啥了 解决方案二: 没有这个功能的,stackoverflow主要就是问答,不存在社交功能 解决方案三: 直接加入你浏览器的书签不就行了?

[UI] Elastic Stack &amp; scrollReveal.js

Elastic Stack & scrollReveal.js   Elastic Stack http://freebiesbug.com/code-stuff/elastistack-js-dragging-interaction/ http://tympanus.net/Development/ElasticStack/     scrollReveal.js https://github.com/julianlloyd/scrollReveal.js http://scrollrevea

warning The transaction log file is corrupted.

Remark Even if appealing using compress option has a constraint when preparing the backup, as clearly stated by Percona: Before you can prepare the backup you'll need to uncompress all the files with qpress. The error message you get is : xtrabackup: