2
Error: Unhandled exception at 0x60092A8D (msvcr110d.dll) in C_Son60.exe: 0xC0000005: Access violation writing location 0xCCCCCCCC.

以下のコードを実行すると、このエラー コードが表示されます (正常にコンパイルされます)。

#include <stdio.h>

int i;

int main(void){

char *names[3];

//get the names of the cities
puts("Enter names of cities");
for (i = 0; i < 3; i++)
{
    fgets( names[i], 99, stdin);
}
//print entered names
for (i = 0; i < 3; i++)
{
    printf("%s", *names[i]);
}

getch();
}
4

3 に答える 3

4

それらを読み込む前に、char ポインタが指すメモリを割り当てる必要があります。

例えば:

for (i = 0; i < 3; i++)
{
  names[i] = malloc(200);
  fgets( names[i], 99, stdin);
}
于 2013-09-17T12:11:38.277 に答える
1

何かを保存する前に、メモリを割り当てる必要があります。要素の配列を割り当てる必要があり、コンパイル時に要素の数がわからない場合は、 を使用malloc()してそれらを割り当てる必要があります。

freeメモリリークを避けるために、後で動的に割り当てられたメモリを忘れないでください!

于 2013-09-17T12:11:40.250 に答える