私はこの振る舞いを理解するのに本当に苦労しているので、誰かが状況に光を当てることができるかもしれません。メソッドから構造体へのポインターを返すことができず、後でそれを再利用できると期待できる理由がわかりません。
ご覧のとおり、このgenerateSmallMatrix()
メソッドはint []配列を作成し、それをysmf構造体内に設定してから、mainに戻ります。次に、Mainはysmf *を取得し、printArrayを呼び出します(再度)。そして、3回目の試行では、配列を取得できなくなります。それは私を夢中にさせています。
私はEclipseデバッガーで、の場所がすべての呼び出しでmatrix->A
同一であることを確認しました(0x7fffffffe180-したがって、Cポインターについて知っているすべての場合、そのintにアクセスする任意の形式が正しい値を返す必要があります-*(ax ++)またはax [i] )..しかしどちらもしません..
控えめに言っても非常にイライラするので、ここにコードがあります:
#include <stdio.h>
#include <stdlib.h>
typedef struct sparseMatrix
{
int* A;
} ysmf;
void printArray(int* ax, int length) {
int i = 0;
for (i = 0; i < length; i++) {
printf("%i,", ax[i]);
}
printf("\n");
}
ysmf* generateSmallMatrix()
{
ysmf *matrix = malloc(sizeof(ysmf));
int a[] = {1,2,3,9,1,4};
printArray(a, 6); // returns 1,2,3,9,1,4,
matrix->A = a;
printArray(matrix->A, 6); //returns 1,2,3,9,1,4,
//printArray(matrix->A, 6);
return matrix;
}
int main(void) {
ysmf* matrix = generateSmallMatrix();
printArray(matrix->A, 6); //returns 1,6,-7856,32767,1,4,
return EXIT_SUCCESS;
}
コメントを挿入したところに問題が発生していることがわかります。
これはおそらく私が見逃してはならない完全に基本的なものであることを私は知っています。