私はrealloc()でいくつかのメモリを割り当てようとしています。これまでのところ動作します。realloc()の後のセグメンテーションフォルト。割り当てられたメモリをポインタに割り当てることができません
// in header
typedef struct {
int a;
char test[20];
} MyContent;
typedef struct {
MyContent* values;
// simmilar to: MyContent values[]
// ... some other stuff
} MyData;
// in source
void myFunction(MyData* dataPtr) {
dataPtr->values = NULL;
MyData* tempPtr = NULL;
for (int i = 1; i < 10; i++) {
tempPtr = (MyContent*) realloc(dataPtr->values, i * sizeof(MyContent));
if (tempPtr == NULL) {
free(dataPtr->values);
break;
}
dataPtr->values = tempPtr; // Here I get the segmentation fault
dataPtr->values[(i-1)].a = 42;
// ...
}
}
私が間違ってここに何が起こっているのかを把握することはできません:私は、構造体の変数にポインタに割り当てられたメモリを割り当てる場合でも、私は、セグメンテーションフォールトを取得します。助言がありますか?ご協力いただきありがとうございます。
エラーは貼り付けられていません。上記のコードは、重要な問題が1つしかありません。これは 'realloc'が' NULL'を返すケースを誤って処理します。エラーを示すコンパイル可能な完全な例を投稿できる場合は、おそらくそれを見つけることができます。それ以外の場合は、コードで 'valgrind'を実行してください。 (ところで、このCコードまたはC++コードですか?両方のタグを置くと、それは非常に混乱します。) –
@DavidSchwartz、OPが投稿したコードはコンパイルされ、CまたはC++のいずれかで正常に実行されます:) – bdonlan
@ bdonlan:そうです、それは彼が何を求めているのかを知ることは不可能です。例えば、私がそれをテストしようとしていたら、それをCコードかC++コードとしてテストすべきでしょうか?私が修正/変更を提案するつもりなら、それらはCまたはC++のコードでなければなりませんか? –