<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=Out_of_memory</id>
	<title>Out of memory - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://monobook.org/w/index.php?action=history&amp;feed=atom&amp;title=Out_of_memory"/>
	<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=Out_of_memory&amp;action=history"/>
	<updated>2026-07-20T19:56:20Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://monobook.org/w/index.php?title=Out_of_memory&amp;diff=3910&amp;oldid=prev</id>
		<title>imported&gt;MikeCAT: 作成</title>
		<link rel="alternate" type="text/html" href="https://monobook.org/w/index.php?title=Out_of_memory&amp;diff=3910&amp;oldid=prev"/>
		<updated>2013-09-14T10:31:02Z</updated>

		<summary type="html">&lt;p&gt;作成&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{小文字}}&amp;#039;&amp;#039;&amp;#039;out of memory&amp;#039;&amp;#039;&amp;#039;とは、[[黒歴史]]である[[LSI C-86 試食版]]の[[わがまま]]の一つである。&lt;br /&gt;
&lt;br /&gt;
==概要==&lt;br /&gt;
詳細な発生条件は不明だが、[[ソースコード]]の長さが関係している可能性がある。&lt;br /&gt;
&lt;br /&gt;
==再現例==&lt;br /&gt;
ここに示した方法は、[[環境依存]]かもしれない。&lt;br /&gt;
&lt;br /&gt;
1.LSI C-86 試食版を入手し、初期設定を行う&amp;lt;br /&amp;gt;&lt;br /&gt;
LSI C-86 試食版は[http://www.vector.co.jp/soft/maker/lsi/se001169.html Vectorから入手]できる。&lt;br /&gt;
&lt;br /&gt;
2.次のコードをtxedit.cとして適当なフォルダに保存する&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
long strnum(char*);&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
	FILE *file;&lt;br /&gt;
	char* naiyou;&lt;br /&gt;
	char* edit;&lt;br /&gt;
	char cmd[10000];&lt;br /&gt;
	char content[10000];&lt;br /&gt;
	char filename[10000];&lt;br /&gt;
	long line;&lt;br /&gt;
	size_t size;&lt;br /&gt;
	long nowline;&lt;br /&gt;
	char* now;&lt;br /&gt;
	char command[10000];&lt;br /&gt;
	naiyou=calloc(1,1);&lt;br /&gt;
	while(1) {&lt;br /&gt;
		printf(&amp;quot;command&amp;gt;&amp;quot;);&lt;br /&gt;
		fgets(command,10000,stdin);&lt;br /&gt;
		now=strpbrk(command,&amp;quot; &amp;quot;);&lt;br /&gt;
		memset(content,0,10000);&lt;br /&gt;
		line=0;&lt;br /&gt;
		if(now==NULL) {&lt;br /&gt;
			now=strpbrk(command,&amp;quot;\n&amp;quot;);&lt;br /&gt;
			*now=0;&lt;br /&gt;
			strcpy(cmd,command);&lt;br /&gt;
		} else {&lt;br /&gt;
			memcpy(cmd,command,now-command);&lt;br /&gt;
			cmd[now-command]=0;&lt;br /&gt;
			command[strlen(command)-1]=0;&lt;br /&gt;
			if(*(now+1)==&amp;#039;\&amp;quot;&amp;#039;) {&lt;br /&gt;
				edit=strpbrk(now+2,&amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
				if(edit==NULL)edit=command+strlen(command)-1; else {&lt;br /&gt;
					if(*(edit+1)==32)line=atol(edit+2);&lt;br /&gt;
				}&lt;br /&gt;
				memcpy(content,now+2,edit-now-2);&lt;br /&gt;
			} else {&lt;br /&gt;
				edit=strpbrk(now+1,&amp;quot; &amp;quot;);&lt;br /&gt;
				if(edit==NULL)edit=command+strlen(command); else {&lt;br /&gt;
					line=atol(edit+1);&lt;br /&gt;
				}&lt;br /&gt;
				memcpy(content,now+1,edit-now-1);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		switch(strnum(cmd)) {&lt;br /&gt;
		case 93:/*new*/&lt;br /&gt;
			if(naiyou!=NULL)free(naiyou);&lt;br /&gt;
			naiyou=calloc(1,1);&lt;br /&gt;
			printf(&amp;quot;成功\n&amp;quot;);&lt;br /&gt;
			break;&lt;br /&gt;
		case 118:/*open*/&lt;br /&gt;
			file=fopen(content,&amp;quot;r&amp;quot;);&lt;br /&gt;
			if(file==NULL) {&lt;br /&gt;
				printf(&amp;quot;error:ファイルオープンに失敗\n&amp;quot;);&lt;br /&gt;
			} else {&lt;br /&gt;
				strcpy(filename,content);&lt;br /&gt;
				fseek(file,0,SEEK_END);&lt;br /&gt;
				size=ftell(file);&lt;br /&gt;
				if(naiyou!=NULL)free(naiyou);&lt;br /&gt;
				naiyou=calloc(size+1,1);&lt;br /&gt;
				fseek(file,0,SEEK_SET);&lt;br /&gt;
				fread(naiyou,size,1,file);&lt;br /&gt;
				fclose(file);&lt;br /&gt;
				printf(&amp;quot;成功\n&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case 107:/*save*/&lt;br /&gt;
			file=fopen(content,&amp;quot;w&amp;quot;);&lt;br /&gt;
			if(file==NULL) {&lt;br /&gt;
				printf(&amp;quot;error:ファイルオープンに失敗\n&amp;quot;);&lt;br /&gt;
			} else {&lt;br /&gt;
				strcpy(filename,content);&lt;br /&gt;
				fwrite(naiyou,strlen(naiyou),1,file);&lt;br /&gt;
				fclose(file);&lt;br /&gt;
				printf(&amp;quot;成功\n&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
#ifdef CAUSE_OOM&lt;br /&gt;
		case 199:/*update*/&lt;br /&gt;
			file=fopen(filename,&amp;quot;w&amp;quot;);&lt;br /&gt;
			if(file==NULL) {&lt;br /&gt;
				printf(&amp;quot;error:ファイルオープンに失敗\n&amp;quot;);&lt;br /&gt;
			} else {&lt;br /&gt;
				fwrite(naiyou,strlen(naiyou),1,file);&lt;br /&gt;
				fclose(file);&lt;br /&gt;
				printf(&amp;quot;成功\n&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case 380:/*showfile*/&lt;br /&gt;
			printf(&amp;quot;%s\n&amp;quot;,filename);&lt;br /&gt;
			break;&lt;br /&gt;
#endif&lt;br /&gt;
		case 200:/*delete*/&lt;br /&gt;
			line=atol(content);&lt;br /&gt;
		case 21:/*add*/&lt;br /&gt;
		case 89:/*set*/&lt;br /&gt;
			edit=calloc(strlen(naiyou)+strlen(content)+3,1);&lt;br /&gt;
			if(line&amp;lt;=0 || (line==1 &amp;amp;&amp;amp; strlen(naiyou)==0)) {&lt;br /&gt;
				if(strnum(cmd)==21) {&lt;br /&gt;
					strcpy(edit,naiyou);&lt;br /&gt;
					if(strlen(naiyou)&amp;gt;0)strcat(edit,&amp;quot;\n&amp;quot;);&lt;br /&gt;
					strcat(edit,content);&lt;br /&gt;
					printf(&amp;quot;成功\n&amp;quot;);&lt;br /&gt;
				} else {&lt;br /&gt;
					strcpy(edit,naiyou);&lt;br /&gt;
					printf(&amp;quot;error:そんな行はありません\n&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
			} else {&lt;br /&gt;
				now=naiyou-1;&lt;br /&gt;
				for(nowline=0;nowline&amp;lt;line-1;nowline++) {&lt;br /&gt;
					now=strpbrk(now+1,&amp;quot;\n&amp;quot;);&lt;br /&gt;
					if(now==NULL) {&lt;br /&gt;
						strcpy(edit,naiyou);&lt;br /&gt;
						printf(&amp;quot;error:そんな行はありません\n&amp;quot;);&lt;br /&gt;
						nowline=-1;&lt;br /&gt;
						break;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				if(now==naiyou-1)now=naiyou;&lt;br /&gt;
				if(nowline!=-1) {&lt;br /&gt;
					memcpy(edit,naiyou,now-naiyou);&lt;br /&gt;
					if(strnum(cmd)!=200) {&lt;br /&gt;
						if(now!=naiyou)strcat(edit,&amp;quot;\n&amp;quot;);&lt;br /&gt;
						strcat(edit,content);&lt;br /&gt;
						if(now==naiyou)strcat(edit,&amp;quot;\n&amp;quot;);&lt;br /&gt;
					}&lt;br /&gt;
					if(strnum(cmd)!=21)now=strpbrk(now+1,&amp;quot;\n&amp;quot;);&lt;br /&gt;
					if(now!=NULL)strcat(edit,now);&lt;br /&gt;
					printf(&amp;quot;成功\n&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			free(naiyou);&lt;br /&gt;
			naiyou=calloc(strlen(edit)+1,1);&lt;br /&gt;
			strcpy(naiyou,edit);&lt;br /&gt;
			free(edit);&lt;br /&gt;
			break;&lt;br /&gt;
		case 172:/*show*/&lt;br /&gt;
			line=atol(content);&lt;br /&gt;
			if(line&amp;lt;=0) {&lt;br /&gt;
				printf(&amp;quot;error:そんな行はありません\n&amp;quot;);&lt;br /&gt;
			} else {&lt;br /&gt;
				now=naiyou-1;&lt;br /&gt;
				for(nowline=0;nowline&amp;lt;line-1;nowline++) {&lt;br /&gt;
					now=strpbrk(now+1,&amp;quot;\n&amp;quot;);&lt;br /&gt;
					if(now==NULL) {&lt;br /&gt;
						printf(&amp;quot;error:そんな行はありません\n&amp;quot;);&lt;br /&gt;
						nowline=-1;&lt;br /&gt;
						break;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				if(nowline!=-1) {&lt;br /&gt;
					edit=strpbrk(now+1,&amp;quot;\n&amp;quot;);&lt;br /&gt;
					if(edit==NULL)edit=naiyou+strlen(naiyou);&lt;br /&gt;
					memcpy(cmd,now+1,edit-now-1);&lt;br /&gt;
					cmd[edit-now-1]=0;&lt;br /&gt;
					printf(&amp;quot;%s\n&amp;quot;,cmd);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case 160:/*exit*/&lt;br /&gt;
			free(naiyou);&lt;br /&gt;
			exit(0);&lt;br /&gt;
		default:&lt;br /&gt;
			printf(&amp;quot;error:コマンドが不正です\n&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
long strnum(char* str) {&lt;br /&gt;
	long num;&lt;br /&gt;
	long i;&lt;br /&gt;
	char temp;&lt;br /&gt;
	num=0;&lt;br /&gt;
	for(i=0;i&amp;lt;strlen(str);i++) {&lt;br /&gt;
		temp=str[i]-64;&lt;br /&gt;
		if(temp&amp;gt;=33)temp-=32;&lt;br /&gt;
		num+=temp*(i+1);&lt;br /&gt;
	}&lt;br /&gt;
	return num;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
これは[[テキスト]]を編集できる[[ラインエディタ]]の[[プログラム]]だが、そんなことは今はどうでもいい。&lt;br /&gt;
&lt;br /&gt;
3.[[コンパイル]]する&lt;br /&gt;
&amp;lt;pre&amp;gt;lcc txedit.c&amp;lt;/pre&amp;gt;としてコンパイルすると通り、[[実行形式ファイル]]が生成されるが、&lt;br /&gt;
&amp;lt;pre&amp;gt;lcc -DCAUSE_OOM txedit.c&amp;lt;/pre&amp;gt;としてコンパイルするとout of memoryが出力される。&lt;br /&gt;
&lt;br /&gt;
==関連項目==&lt;br /&gt;
* [[LSI C-86 試食版]]&lt;br /&gt;
* [[コンパイルエラー]]&lt;/div&gt;</summary>
		<author><name>imported&gt;MikeCAT</name></author>
	</entry>
</feed>