[英]Segfault when assigning to char* in struct
所以我有一個結構“序列”,里面有一個char *。 當我嘗試創建序列時,每當我嘗試更改char *時,它都會出現段錯誤。 這是相關的代碼。 結構:
typedef struct _sequence {
unsigned int length;
unsigned char* bytes;
} Sequence;
構造函數:
Sequence* newSequence(unsigned char firstByte) { //Creates new sequence, allocates memory
printf("Creating new Sequence\n");
Sequence* seq = (Sequence*)malloc(sizeof(Sequence));
printf("Have new sequence\n");
seq->length = 1;
printf("Set length\n");
seq->bytes[0] = firstByte;
printf("Set variables\n");
return seq;
}
現在我這里有一個主要功能只是出於測試目的,該文件最終將沒有主要功能。 但是這是我以前測試的內容:
int main() {
char test[] = "ab";
printf("Testing sequences!\n");
Sequence* newSeq = newSequence(test[0]);
printf("Made new sequence!\n");
outputSequence(newSeq, stdout);
printf(" <-- new Sequence created\n");
return 0;
}
printfs再次用於測試目的。 它始終在構造函數中一直打印到“設置長度\\ n”,然后出現段錯誤。 我究竟做錯了什么? 謝謝!
您為該結構正確分配了空間,但沒有為bytes
元素指向的緩沖區分配任何空間。
這行調用未定義的行為,因為未初始化bytes
:
seq->bytes[0] = firstByte;
您還需要分配一個緩沖區並將seq->bytes
指向該緩沖區。
Sequence* seq = malloc (sizeof(Sequence));
在這里,您為一個char *和一個int分配了內存空間,但是您需要通過char *指向的對象為要存儲的內容分配空間,方法是:
seq->bytes = malloc (my_string_size);
只有這樣,您才能開始在分配的內存塊中存儲字符。
編輯:例如,要存儲一個字符,您可以執行以下操作:
seq->bytes = malloc(1);
seq->bytes[0] = firstByte;
將其用作單個字符。 但是C中操作字符串的一個好習慣是總是以這種方式多保留一個字符:
seq->bytes = malloc(2);
seq->bytes[0] = firstByte;
seq->bytes[1] = '\0';
第二種方法看起來更像是C中的真實“字符串”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.