0
私のプログラムを実行すると、どこかでセグメンテーションフォールトが発生しているようですが、テストを実行したところ、見つからないようです。私はgcc -Wall -Werror -std = c99 -Oを使ってコンパイルしています。seg faulting textbuffer newTB
タスクは、 "\ n"で区切ってリンクリストに入れるTB newTBでテキストバッファを作成することです。
test = newTB("hello\ngood bye\nworld\n");
[hello]->[good bye]->[world]
それは私はそれが障害をSEGするために引き起こして見逃している何かである必要がありますので、これは現在、現時点で唯一の機能です。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "textbuffer.h"
struct textbuffer {
char *text;
int length;
TB next;
};
void printBuffer(TB tb);
TB newTB (char text[]){
if (text == NULL) {
printf("buffer underflow\n");
abort();
}
TB new = calloc(1, sizeof(struct textbuffer));
new->length = 0;
new->next = NULL;
TB current = new;
char *token;
int size;
//first token; intialise first.
token = strtok(text, "\n");
size = strlen(token);
current->text = calloc(size + 1, sizeof(char));
strcpy(current->text, token);
//use memset to add a NULL terminator at the end.
memset(current->text, '\0', size + 1);
new->length++;
current->next = NULL;
int count = 0;
while (token != NULL) {
//first linked list already done, do nothing for the first loop.
if (count == 0) {
} else {
//create next textbuffer and fill it with the token.
current->next = calloc(1, sizeof(struct textbuffer));
current = current->next;
size = strlen(token);
current->text = calloc(size + 1, sizeof(char));
strcpy(current->text, token);
memset(current->text, '\0', size + 1);
new->length++;
}
count++;
token = strtok(NULL, "\n");
}
current->next = NULL;
return new;
}
使用すると、 'が代わりにcalloc''のmalloc'。 –
'memset(current-> text、 '\ 0'、size + 1);'は文字列全体をゼロに設定します。あなたが望むものではありません。 'strcpy'はそれを取り除くことができます(私は' strdup'を使用しました) –
デバッグ版をビルドします(ビルド時に '-O'フラグを落として' -g'フラグを追加します)。あなたのプログラムをデバッグする](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –