変数char **配列を持つSmartArrayの構造体typedefがあります。私は数時間にわたってコードをデバッグしようとしており、多くの進歩を遂げました。しかし、私はこの特定のバグに固執しています。私は上記の配列を印刷する機能を持っています。それは2回印刷され、3回目には全く印刷されません!私は配列にmallocをどのように追加しているのか、これが正しいものではないという印象を持っています。配列の最後のセクションについては、 "Testing Na"と表示されます。何か案は?私は助けに感謝します。ここで構造体へのポインタによって制御される**ポインタの要素の追加と出力
が、私は疑っています機能の一部が原因である、しかし、私はそれを見つけるように見えることはできません://文字列
ここprintf("approaching malloc\n");
strPtr = malloc(sizeof(char) * (strlen(str) + 1));
if(strPtr == NULL)
{
return NULL;
}
printf("made it past malloc!\n");
strcpy(strPtr, str);
//if crash probably this code
smarty->array[index] = strPtr;
if(smarty->array[0] == NULL)
{
return NULL;
}
return strPtr;
のための分のスペースを割り当てる私のテストコードは次のとおりです。
typedef struct SmartArray
{
// We will store an array of strings (i.e., an array of char arrays)
char **array;
// Size of array (i.e., number of elements that have been added to the array)
int size;
// Length of the array (i.e., the array's current maximum capacity)
int capacity;
} SmartArray;
int main(void)
{
int i; char buffer[32];
SmartArray *smarty1 = createSmartArray(-1);
printf("Array created\n");
// Print the contents of smarty1.
printf("\n-- SMART ARRAY 1: --\n");
printSmartArray(smarty1);
printf("Made it past print!\n");
put(smarty1,"Hi, my name is ");
put(smarty1, "Hello, my name is");
put(smarty1, "Testing Names");
printf("made it past put!\n");
printf("smart away is now\n");
printSmartArray(smarty1);
printf("end of main!\n");
私は初心者であるため、私はただ見落としているような気がします。
ここで私はそれがメモリに見えるように取得しようとしている何の絵だ: click here for memory diagram
UPDATE:それはすべての名前を印刷しなかった理由私は考え出したが、プログラムは、印刷atfterセグメンテーションフォールト関数。
コードに2D配列がありません。 'int ** 'もありません。 'int **'のようなものは2D配列ではなく、1つを指すことができないことに注意してください!ポインタへのポインタです。配列の配列とはまったく異なるデータ型です。[ask]を読み、[mcve]を提供します。 – Olaf
@Olaf私は自分のコードに追加しました。 – starlight
あなたは通常、ユーザーに叫んでいますか? –