スタックスマッシュプロテクションに深刻な問題があり、今では新しいエラーが発生します。 Linuxには特別な保護があるという事実に強く関係していると思います。誰も私に説明してくださいなぜ私はこの特定のケースでセグメンテーションフォルトを得るのですか?読み取り機能上のセグメンテーションフォルト
vector<const char*> Words;
void read(){
FILE* a;
char s[100];
a = fopen("text.txt", "r");
while (!feof(a))
{
fgets(s, 100, a);
char *newAlloc = new char[strlen(s)];
strcpy(newAlloc, s);
Words.push_back(newAlloc);
}
fclose(a);
}
アップデート:私はすべてのソリューションを試してみましたが、コードを変更しますが、問題がまだあるので、私はこれにコードを削減しようとした:それはまだ私にそのエラーを与える
#include<iostream>
#include<stdio.h>
int main()
{
FILE* a;
a=fopen("text.txt", "r");
fclose(a);
}
を(私は解決している練習で必須です) - 私はUbuntu 15.10とQT CreatorをGCCコンパイラと共に使用しています。
更新:解決しました。私はfopenへの完全な道を与えなかったので問題があったと思う。私はubuntuで新しいです。どうやらいくつかの違いがあります。
char * a = "/home/codrinz/text.txt";
FILE * file = fopen(a, "r");
何CおよびC++の不浄ミックス。 Cスタイルの文字列を取り除き、 'std :: string'で置き換えると、問題を取り除くことができます。ファイルベースのIOに対しても同様の処理を行います(今はnullptrである可能性のある返されたポインタをチェックしません)。 – SergeyA