Я пишу программу C для отображения слов на светодиодной доске объявлений.C - Segfault на петле над char *
Я петлю над символом *, содержащим мое сообщение, и после нескольких обработок я даю segfault.
Я изолировал мою проблему в этом коде (появляются на выдаёт ошибку сегментации функции scrollMsg()):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHM_SIZE 1024
void setMsg()
{
key_t key;
int shmid;
char *data;
key = ftok("my_test_key", 'R');
shmid = shmget(key, SHM_SIZE, 0644 | IPC_CREAT);
data = shmat(shmid, (void *)0, 0);
strncpy(data, "TEST", SHM_SIZE);
}
char * getMsg()
{
key_t key;
int shmid;
char *msg;
key = ftok("my_test_key", 'R');
shmid = shmget(key, SHM_SIZE, 0644 | IPC_CREAT);
msg = shmat(shmid, (void *)0, 0);
return msg;
}
void scrollMsg(char *buf)
{
char *p = NULL;
for (p=buf; *p != '\0'; p++) {
printf("%p\n", p);
}
}
int main (int argc, char **argv) {
char *msg = NULL;
setMsg();
do {
msg = getMsg();
printf("%s\n", msg);
scrollMsg(msg);
} while(1);
}
Кто-то может объяснить мне, почему это добавить?
Благодаря
Это 'printf ("% p \ n ", p);' предназначено? Кроме того, убедитесь, что ваши указатели не являются 'NULL' перед разыменованием. –
, пожалуйста, сделайте обработку ошибок для возврата из функции 'shmat'. Проверьте, имеет ли ваша строка нулевой ограничитель. –