C内存故障中共享内存

时间:2018-08-17 20:16:29

标签: c linux memory shared

我一直在这里搜索,但找不到解决方法。

在下面的C(linux)代码中,我试图将txt中的字符串读取到缓冲区中,并将该缓冲区复制到结构中的缓冲区数组中,以便可以从客户端读取内容。

问题在于,当我尝试执行strcpy时,它说“内存故障”。我在while循环中的“ HERE”评论了它。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>

int main() {

  FILE *fp;

  char buff[255];
  int i;
  int shmid;

  typedef struct structStr {
    char buffer[100][255];
    int numCol;
  } structure;

  // ftok to generate unique key
  key_t key = ftok("shmfile", 65);

  // shmget returns an identifier in shmid
  shmid = shmget(key, sizeof(structure), IPC_CREAT | 0666);
  // shmat to attach to shared memory
  structure *input = shmat(shmid, NULL, 0);

  fp = fopen("entrada.txt", "r");

  i = 0;

  while (fgets(buff, sizeof(buff), (FILE *)fp)) {
    printf("i = %d ", i);
    printf("buff: %s", buff);
    strcpy(input->buffer[i], buff); //HERE
    // printf("buffer[%d]: %s", i, input->buffer[i]);
    i++;
  }

  input->numCol = i;

  // detach from shared memory
  shmdt(input);

  fclose(fp);

  return 0;
}

输出为: 我= 0增益:a1 内存故障

PD:我的txt有:

a1 a2 a3 。 。 。 a30

这就是为什么只打印a1

0 个答案:

没有答案