Yığın Smash Protection ile ilgili bazı ciddi sorunlar yaşıyorum ve şimdi yeni bir hata alıyorum -Segmentation fault-. Linux'un bazı özel korumalara sahip olmasıyla çok ilgili olduğunu düşünüyorum. Herkes bana açıklayabilir mi, bu özel vakada neden Segmentasyon hatası alıyorum?Okuma işlevindeki bölümleme hatası
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);
}
güncelleme: Ben tüm çözümleri denedim ve kod modifiye ancak sorun hala var, bu yüzden bu kod azaltmak için çalıştı: Hala bana bu hata veriyor
#include<iostream>
#include<stdio.h>
int main()
{
FILE* a;
a=fopen("text.txt", "r");
fclose(a);
}
Fopen ile satırda (Ben çözdüğüm alıştırmada zorunlu olan) - GCC derleyicisi ile birlikte Ubuntu 15.10 ve QT Creator kullanıyorum.
Güncelleme: Çözüldü. Sanırım sorun şu ki, fopen'e tam yol vermedim. Ubuntu ile yeniyim. Görünüşe göre farklı şeyler var.
Ne C ve C arasındaki şerli karışımı ++. C stili dizelerden kurtulun, bunları std :: string' ile değiştirin ve sorunlarınızdan kurtulacaksınız. Dosya tabanlı IO için de aynısını yapın (şu anda nullptr olabilecek döndürülen işaretçiyi işaretlemiyorsunuz). – SergeyA