0

Visual C ++2010のプロジェクトの一部である1つのcppファイルに次のコードがあります。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

トークンがnullで終了せず、後で解放しようとすると、特に割り当てていないメモリにアクセスしようとすることが原因である可能性があります。

于 2012-06-16T03:29:02.423 に答える