動きが部分的におかしくなる要因
以前はアドバイスありがとうございました。
配列オーバーフロー?
http://okwave.jp/qa4406037.html
以前のプログラムで以下を暗号化→解読化すると元通りにはならず、
6,8,64,66,67,68行目だけがおかしくなります。
明らかにその行に無い文字が交じってきたりしますが、
初期化はしておりますし、他の行は大丈夫なのに
何故この行だけがおかしくなるのか(暗号化の時点で既におかしいです)
わかりません。
同じ作り込みをしていて、一部分だけ動きがおかしくなるのは
どういった理由があるのでしょうか?
特に周期性は見られません。
↓下の行から1行目
#define MAX_MOJI 250 /* ファイルNAME */
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char ch;
double d1;
float fl;
short sh;
int in;
long ln;
} testcell;
char c1;
char ch2[2];
char ch3[3];
double d;
testcell t;
char c2;
char c3;
long ln;
float fl;
char *p;
static int st;
void main( void );
void func( int );
void main( void ){
char* alc = malloc( 1000 );
func( 100 );
printf( "\nメイン\n" );
printf( "allocated addr : %p\n", alc );
printf( "func() addr : %p\n", func );
printf( "main() addr : %p\n", main );
printf( "addr of printf : %p\n", printf );
printf( "char c1 %2d : %p\n", sizeof(c1), &c1 );
printf( "char ch2[2] %2d : %p\n", sizeof(ch2),ch2 );
printf( "char ch3[3] %2d : %p\n", sizeof(ch3),ch3 );
printf( "double d %2d : %p\n", sizeof(d), &d );
printf( "testcell t %2d : %p\n", sizeof(t), &t );
printf( "char c2 %2d : %p\n", sizeof(c2), &c2 );
printf( "char c3 %2d : %p\n", sizeof(c2), &c3 );
printf( "long ln %2d : %p\n", sizeof(ln), &ln );
printf( "float fl %2d : %p\n", sizeof(fl), &fl );
printf( "char *p %2d : %p\n", sizeof(p), &p );
printf( "static int st %2d : %p\n", sizeof(st), &st );
printf( "\nコウゾウタイ\n" );
printf( "char ch %2d : %p\n", sizeof(t.ch), &t.ch );
printf( "double d1 %2d : %p\n", sizeof(t.d1), &t.d1 );
printf( "float fl %2d : %p\n", sizeof(t.fl), &t.fl );
printf( "short sh %2d : %p\n", sizeof(t.sh), &t.sh );
printf( "int in %2d : %p\n", sizeof(t.in), &t.in );
printf( "long ln %2d : %p\n", sizeof(t.ln), &t.ln );
}
void func( int p ){
static int s;
int loc;
printf( "\nファンクション\n" );
printf( "parameter addr : %p\n", &p );
printf( "func static addr : %p\n", &s );
printf( "func local addr : %p\n", &loc );
}
お礼
episteme さん 毎度、お世話になります。 その後、『WCHAR c1[20], c2[20], c3[20], c4[20];』をグロ-バル変数に して、トライしました所旨く行きました。 アドバイス頂きまして有難うございます。
補足
episteme さん 毎度、お世話になります。 動作環境の記述が無くて御免なさい。 動作環境: Windows7、Visual Studio Community VS2013のMFC 不具合現象: Button3をクリックしまして、下記のコードの、swscanf_s(L"a b c d", ....)を 実行すると、『Run-Time Check Failure #2 - Stack around the variable 'c1' was corrupted.』なる警告表示のDialogがでます。 そして、c1、c2,c3,c4にはデーターが入っていません。 ============================ void CT_App1View::OnBnClickedButton3(){ wchar_t c1[20], c2[20], c3[20], c4[20]; swscanf_s(L"a b c d", L"%s %s %s %s", c1, sizeof(c1), c2, sizeof(c2), c3, sizeof(c3), c4, sizeof(c4)); } ======================== これは、『VS2013のMFC』に関する問題と思いますが、Button3のコードは、 他のコードとは独立していると思います。 尚、wcscopy、fprintf_s、wcscomp等は、問題ありません。 注)『int main()』でのテストは、これからやってみる予定です。 以上