0

我在一个 cpp 文件中有以下代码,该文件是 Visual c++ 2010 中项目的一部分我不明白为什么对 free 的调用失败。

#include <time.h>

#include "stdafx.h"
#include <wchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>

wchar_t * getRandomShortToken(){

    int       i;
    wchar_t * token = 0;

    srand((unsigned int)time(NULL));

    token = (wchar_t*)malloc(sizeof(wchar_t) * 6);
    memset(token, 0, sizeof(wchar_t*) *6);

    for(i = 0; i < 5; i++){

        token[i] = ( rand() % 20 ) + 64;

    }

    return token;

}

int _tmain(int argc, _TCHAR* argv[]){

    wchar_t * token = 0;

    system("pause");

    token = getRandomShortToken();
    printf("My Token is '%ls'\n', token);
    system("pause");
    free(token);

    system("pause");

    return 0;
}

请注意,令牌已正确填充到 printf!

4

2 回答 2

2

您的代码在此语句中损坏了内存:

memset(token, 0, sizeof(wchar_t*) *6); 

你可能的意思是:

memset(token, 0, sizeof(wchar_t) * 6);

存在语法错误:

printf("My Token is '%ls'\n', token);

应该:

printf("My Token is '%ls'\n", token);
于 2012-06-16T03:43:59.473 回答
0

我认为这可能是因为令牌没有以空值终止,并且当您稍后尝试释放它时,它会尝试访问您没有专门分配的内存。

于 2012-06-16T03:29:02.423 回答