私はいくつかのコードを書いていましたが、私は関数calloc
を使いました。callocに関する奇妙なこと
私は、この関数に渡される最初と2番目の引数が両方ともゼロである場合、関数は0個の要素に必要なスペースを割り当てようとしていることを理解しています。
このプログラムは、n> 0であっても正常に動作します。どうしてですか?存在しない配列の位置に書き込もうとしているので、エラーが表示されるはずです。ありがとう!
#include <stdio.h>
#include <stdlib.h>
int main(){
int n;
scanf("%d", &n);
int *test = calloc(0, 0);
for(int i = 0; i < n; i++){
test[i] = 100;
printf("%d ", test[i]);
}
return 0;
}
未定義の動作は何かが起こる可能性があることを意味します。 – Kevin
構文エラーなし= 'c'にコンパイルエラーがありません。あなたがコンパイルしたものはうまくコンパイルされていますが、未定義の動作である( 'n> 0'のとき)あなたのメモリ領域を越えて書くことになります。 – yano
cのようなエラーはありません。それは指定されたアドレスに試してみるだけです。プログラマは、それが起こらないように注意しなければなりません。 –