私はこの非常に単純なコードをCで書いています。これらは2つの別々のファイルにあります。私は、このコマンドcc myFunction.c main.c
と出力とそれをコンパイル別のファイル内の関数によって返されたポインタのCプログラミングセグメンテーションフォールト
myFunction.c
#include <stdlib.h>
int *extFunc() {
int *a = (int *) calloc(1, sizeof(int));
*a = 12;
return a;
}
main.cの
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p = (int *) extFunc();
int x = *p; // causes segmentation fault !
printf("%d\n", *p); // causes segmentation fault !
}
は、
main.c:6:19: warning: implicit declaration of function 'extFunc' is invalid in C99 [-Wimplicit-function-declaration]
int *p = (int *) extFunc();
^
main.c:6:11: warning: cast to 'int *' from smaller integer type 'int' [-Wint-to-pointer-cast]
int *p = (int *) extFunc();
^
2 warnings generated.
と私はそれを実行し、以下のようなものですそれはSegmentation fault: 11
を与える。私は間違って何をしていますか?
私は関数がmain.cファイルにあり、機能していることを確認しました。しかし、私はそれらを上記のように分離する必要があります。
私の元のコードでは、整数ポインタの代わりに構造体ポインタがあります。ここで私の問題を簡単な例で説明しました。
try int * p = malloc(sizeof(int)); 、次に int * p =(int *)extFunc(); –
関数がコンパイラに対して定義されていないと宣言されていません。エラーメッセージを参照してください。警告をスキップしないでください。悪い習慣です。 main.cに関数を書くか、ヘッダファイルを書いてメインファイルにヘッダファイルをインクルードします。 – ckruczek
@jforbergの質問は警告に関するものではありません。私はちょうど私がそれを編集したときに起こったことの追加情報を追加しました。 –